gpt4 book ai didi

c++ - 派生类和基类对象的内存地址?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:13:49 26 4
gpt4 key购买 nike

我试图找出派生类和基类对象的地址,我发现它们是相同的。实际上,我很困惑如何获得两者的地址?

#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 派生自 Parent1Parent2——并为两个父类提供数据成员因此它们具有非零大小,然后运行类似的诊断,您肯定会发现至多有一个父对象与子对象具有相同的地址。

最后,请注意,不同的编译器会对所有此类问题给出不同的答案:对象布局取决于编译器。

关于c++ - 派生类和基类对象的内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9150109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com