派生类的大小[2]

时间:2017-09-19 08:44:05

标签: c++ oop

为什么以下代码中的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;
}

5 个答案:

答案 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。