#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 ++中默认情况下类的成员是私有的,为什么sizeof派生类是80。
访问说明符private
仅与派生类中基类成员的可访问性相关。派生类包含它派生自的类的子对象。在这种情况下,它包含b1
和b2
子对象。所以它的大小是它们的大小的总和。
你的论证线是有缺陷的。隐私与sizeof
无关。
考虑这个例子:
class base {
int value = 42;
public:
int get() { return value; }
};
class derived : public base {};
derived
确实继承了get
,它没有(直接)访问value
,但当然在derived
实例中有成员value
。您可以通过在get()
上调用derived
轻松说服自己;)
derived
继承了b1
和b2
,所以它的大小至少是它们的大小的总和,每个大小至少是10个int
s的大小,40个字节和32位int
s。这给了我们至少80.会员可见性在这里不相关,它不会影响类型的大小。显然,数组不能为derived
优化,公开一个base
(两次!),应该包含base
类型的完全一样的子对象 - 否则你将如何将它向上转换为base
?