为什么以下代码中的Derived类80的大小?
据我所知,私有数据成员不会被继承,sizeof(Derived)
应该打印40
#include <iostream>
#include <cstdlib>
using namespace std;
class Base{
int a[10];
public:
int b[10];
};
class Derived:public Base{
};
int main()
{
cout<<sizeof(Derived)<<endl;
}
答案 0 :(得分:3)
私有成员是继承的,只是不可见。您使用私有成员隐藏实现细节,但状态必须存储在某处。
答案 1 :(得分:3)
仅仅因为派生类无法访问私有数据成员并不意味着您可以省略它。考虑:
class Base{
int a[10];
public:
int b[10];
int getFirstA() { return a[0]; }
};
class Derived:public Base{
};
int main()
{
Derived d;
int a = d.getFirstA();
}
Base
的实施仍然依赖于所有私人成员。由于Base
的实现构成了Derived
的实现,所以在此处删除私有成员是不明智的,即使Derived
及其客户无法直接访问它。
答案 2 :(得分:1)
私有数据成员不会被继承
错!
私有数据成员是继承的,即使它们不可见。
为什么Derived类80的大小在以下代码中?
如上所述,两个数组都是继承的,因此影响了类的大小(在你的系统中,int
的大小似乎是4,因此10 * 4 + 10 * 4 = 80)。 / p>
答案 3 :(得分:0)
我们无法访问私人会员,但他们是继承的。这就是为什么尺寸为80
的原因因此大小为40+40=80
答案 4 :(得分:0)
私有成员无法访问,但它将被继承。因为它包含20个整数,因此大小为20 * 4 = 80。