【发布时间】:2014-11-27 11:21:12
【问题描述】:
我曾经到处看到基类的私有成员永远不会在派生类中继承,无论您如何继承基类(私有或受保护或公共)。
但是下面的问题真的让我很困惑。我不知道为什么这个程序的输出是 80。它应该是 1 字节(这是 C++ 中空类的大小),因为私有成员永远不会被继承。
#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;
}
【问题讨论】:
-
你看错了。基类中的所有内容都由派生类型继承。
-
私有成员在派生类中被继承,但不可见。
-
“来自基类的所有东西都被派生类型继承” 我想说:所有基类中的所有东西都被派生类型继承。这就是为什么你有 80 个字节 - sizeof(b1) + sizeof(b2)
-
私有成员是派生的,但不能被子类中定义的任何方法访问
-
@MagnusHoff 它们是可见的,但不可访问。它们仍然可以隐藏其他同名声明(例如非成员变量或函数)。
标签: c++ inheritance