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

时间:2013-12-31 15:21:05

标签: c++

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

示例:

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?
}

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

这取决于您对 allocate 的意思:它执行堆分配等。派生对象将包含从基础继承的成员。这就是派生类的所有基类都可以看作是子对象。派生类对象将包含所有这些子对象,并且还将确保它们被正确构造/销毁。

答案 2 :(得分:1)

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

因为从另一个类继承class并且在创建派生类的object时,Complier将分配内存等于派生类+基类的大小,因此会有{ {1}} 由于no loss of data.

也可以访问base class members