【发布时间】:2021-06-28 03:28:19
【问题描述】:
一个最小的可重现示例:
#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;
}
我需要什么:
1
3
我得到了什么:
0
0
我怎样才能做到这一点?
我在搜索过程中发现了以下内容 -
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++ 看起来很相似,但它不能解决我的查询。
编辑:
我被告知这是由于object slicing。
【问题讨论】:
-
另见:What is slicing。即使你在
Sub1和Sub2中覆盖getData1,如果你有一个Super对象数组,那也对你没有任何好处。 -
@NathanPierson 注意到。有解决办法吗?
标签: c++ inheritance object-slicing