【发布时间】:2013-08-01 17:40:26
【问题描述】:
假设有两个类 Base 和 Derived
class Base
{
private:
int a;
}
class Derived:public Base
{
private:
int b;
}
int main()
{
Derived d;
cout<<sizeof(d);
}
输出是8。现在我的问题是当基类的成员变量是私有的并且派生类不能继承它时,为什么它在显示类的大小时包含数据成员?
【问题讨论】:
-
说白了,因为
Derived是Base。访问说明符只是控制谁和在哪里可以访问某些东西。 -
@jrok:实际上,is-a 关系不适用于私有继承。
-
@abarnert 实际上,就类布局而言(这是这里的全部主题),它确实成立。不可能有任何其他方式,否则地狱就会崩溃。
-
@abarnert 好的,是的。然后反过来:Derived has 总是有一个 Base。如果它在它之上公开继承,它也是一个Base。
-
@syam:不,这仅适用于标准布局类。如果基类和派生类都有成员,那么所有的地狱都可以被打破,只要编译器能够正确地跟踪和解释这个地狱。
标签: c++ class inheritance layout