派生类是否为成员变量分配内存?

时间:2014-10-05 18:41:07

标签: c++ class inheritance

#include<cstdio>
#include<iostream>
using namespace std;
class A
{
public:
    int x;
};
class B: public A
{
};
int main()
{
    B b;
    b.x=5;
    cout<<b.x<<endl;

    return 0;
}

我有上面的代码。一切都还好。但是我想知道当我从类A继承类B时,在类B中声明的成员变量x也就像A或者类B一样只是获取访问权限到A类的成员变量x?
在两个不同的类中是否有两个具有相同名称的变量,或者只有一个变量,两个类的对象都可以访问它? 如果在两个不同的类中有两个不同的同名变量,那么为什么在声明派生类的对象时会调用基类的构造函数?

1 个答案:

答案 0 :(得分:1)

创建派生类的对象时,基类子对象嵌入在派生类对象的内存布局中。所以,对于你的问题,只有变量才会成为派生对象的一部分。 因为,我们在这里只涉及非静态成员,每个派生对象都会在内存中获得其基类子对象。 创建基类对象时,它表示不同对象的不同内存,与之前创建的派生对象无关。

希望它澄清你的疑问!

这是一本了解C ++对象模型的好书:

http://www.amazon.com/Inside-Object-Model-Stanley-Lippman/dp/0201834545/ref=sr_1_1?ie=UTF8&qid=1412535828&sr=8-1&keywords=inside+c%2B%2B+object+model