空派生类对象的C ++继承大小

时间:2018-08-31 14:50:20

标签: c++ inheritance

#include<iostream>
using namespace std;
class base {
 int arr[10];
};
class b1: public base { };

class b2: public base { };

class derived: public b1, public b2 {};

int main(void)
{
    cout << sizeof(derived);
    return 0;
}

由于在c ++中,默认情况下,类的成员是私有的,所以派生类的大小为何为80。

3 个答案:

答案 0 :(得分:2)

访问说明符private仅与派生类中基类成员的可访问性有关。派生类包含其派生类的子对象。在这种情况下,它包含b1b2子对象。所以它的大小是两个大小的总和。

答案 1 :(得分:2)

您的论点存在缺陷。隐私与sizeof一类无关。

考虑以下示例:

class base {
    int value = 42;
public:
    int get() { return value; } 
};

class derived : public base {};

derived确实继承了get,它没有对value的(直接)访问权限,但是在derived实例中当然有成员{{1 }}。您可以通过在value上致电get()来轻松地说服自己。)

答案 2 :(得分:1)

derived继承了b1b2,因此其大小至少是它们大小的总和,每个大小至少为十个int s ,40个字节,含32位int。这给了我们至少80分。成员可见性在这里并不重要,它不会影响类型的大小。显然,无法为derived优化数组,因为它是公开的base(两次!),应包含类型完全相同的base子对象-否则您将如何向上转换到base