繁体   English   中英

派生类的实例化是否为基类的私有成员分配内存?

[英]Does an instantiation of a derived class allocate memory for private members of base class?

我想这个话题是我需要问的。 关于这个主题的一点解释会很好。 请清楚一些问题,例如为什么或为什么不?

例:

class A {
 private:
  int a;
};

class B : A {
 int b;
};

int main (int argc, char **argv) {
 B *p = new B(); // Does this allocate memory for a?
}

是。 类对象包含其所有直接非静态数据成员以及任何基类子对象的成员。 访问说明符没有区别; 它们仅限制名称的使用位置。

这取决于你的意思是什么分配 :它不会做一个堆分配或东西。 派生对象将包含从基础继承的成员。 这就是派生类的所有基类都可以看作是子对象。 派生类对象将包含所有这些子对象,并且还将确保它们被正确构造/销毁。

是的它也会为A分配内存。

因为当您从另一个类继承一个class并且在创建派生类的object时,Complier将分配等于派生类+基类大小的内存,这样就no loss of data. base class members也可以从derived class.访问derived class.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM