我试图找出派生类和基类对象的地址,我发现它们是相同的。 实际上,我很困惑如何获得两者的地址?
#include<stdio.h>
class Base {
public:
Base ()
{
printf ("\n Base :: %p\n", this);
}
~Base () {
printf ("\n Base::~Base\n");
}
};
class Der:public Base {
public:
Der () {
printf ("\n Der: %p \n", this);
}
~Der () {
printf ("\n Der:: ~Der\n");
}
};
int main(void) {
Base b;
Der d;
return 0;
}
最佳答案
一个子对象包含一个父对象,就像房子包含一扇门一样。如果你问的是房子的坐标,而我给了你门的坐标,我是对的,是吗?特别是对于您给出的示例,其中没有数据成员也没有虚拟方法:子对象和父对象不仅具有相同的地址,而且具有相同的大小。
现在,如果您使用多重继承——如果 Child
派生自 Parent1
和 Parent2
——并为两个父类提供数据成员因此它们具有非零大小,然后运行类似的诊断,您肯定会发现至多有一个父对象与子对象具有相同的地址。
最后,请注意,不同的编译器会对所有此类问题给出不同的答案:对象布局取决于编译器。
关于c++ - 派生类和基类对象的内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9150109/