从非空基类继承的空派生类

Empty Derived Class inherited from Non-Empty Base Class

本文关键字:派生 基类 继承      更新时间:2023-10-16
class Base 
{
   int i ;
};
class Derived : public Base { } ;
int main()
{
   cout << sizeof(Derived);
}
Output :
 4

在基类中,由于i是私有的,它不应该继承到派生类。因此,基类应该充当空类。而空类的大小是 1 ,那么为什么它显示为 4 ?

Derived类仍然包含i Base ,它只是无法访问,所以大小 4 是因为i

大小仍然是 4,因为 Base 的大小是 4。例如,假设Base有一个函数 public: int getI() {return i;}然后你可以调用Derived::getI(),因此派生确实需要包括私有基础成员。

这里,派生类是公开定义的.. 在定义中的意思是": public base">

因此,派生类可以访问基类的所有公共和私有成员。它将使该派生类中的所有私有成员公开。因此输出是 i.not 1 的 4 coz.如果你写私有,那么它将给出输出 1..