我想这个话题是我需要提出的。关于这个主题的一点解释会很好。请清楚一些问题,例如为什么或为什么不?
示例:
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?
}
答案 0 :(得分:5)
是。类对象包含其所有直接非静态数据成员以及任何基类子对象的成员。访问说明符没有区别;他们只限制可以使用名称的地方。
答案 1 :(得分:2)
这取决于您对 allocate 的意思:它不执行堆分配等。派生对象将包含从基础继承的成员。这就是派生类的所有基类都可以看作是子对象。派生类对象将包含所有这些子对象,并且还将确保它们被正确构造/销毁。
答案 2 :(得分:1)
是的,它也会为A分配内存。
因为从另一个类继承class
并且在创建派生类的object
时,Complier将分配内存等于派生类+基类的大小,因此会有{ {1}}
由于no loss of data.
base class members