A minimal reproducible example:
#include<iostream>
class Super
{
private:
int data1;
public:
virtual int getData1(){return data1;}
};
class Sub1:public Super
{
private:
static const int data1 = 1;
} sub1;
class Sub2:public Super
{
private:
static const int data1 = 3;
} sub2;
int main()
{
Super obj[]={sub1, sub2};
std::cout<<obj[0].getData1()<<'\n';
std::cout<<obj[1].getData1()<<'\n';
return 0;
}
What I need:
1
3
What I got:
0
0
How can I achieve this?
I found the following during my search -
Are static variables in a base class shared by all derived classes?
Accessing subclass members from a superclass pointer C++
C++ override a member variable
Accessing subclass members from a superclass pointer C++ looks similar but it doesn't solve my query.
EDIT:
I was informed that this happens due to object slicing.