#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。
答案 0 :(得分:2)
访问说明符private
仅与派生类中基类成员的可访问性有关。派生类包含其派生类的子对象。在这种情况下,它包含b1
和b2
子对象。所以它的大小是两个大小的总和。
答案 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
继承了b1
和b2
,因此其大小至少是它们大小的总和,每个大小至少为十个int
s ,40个字节,含32位int
。这给了我们至少80分。成员可见性在这里并不重要,它不会影响类型的大小。显然,无法为derived
优化数组,因为它是公开的base
(两次!),应包含类型完全相同的base
子对象-否则您将如何向上转换到base
?