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

标签 c++

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

#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/

相关文章:

C++ 模板元编程 : constexpr function

c++ - 在多台机器上分布状态

c++ - 为什么我的计时器停止计时?

c++ - 如何在 Qt 中向工具栏添加按钮/操作以外的控件,例如文本框和组合框?

c++ - QLineEdit 在激活时更改文本粗细

c++ - 从平面方程绘制任意平面,OpenGL

c++ - 如何使用静态变量来记住最后传递的参数

c++ - 数字中的设置位数和基于设置位的游戏

c++ - PyQt4 创建不可调整大小的窗口

c++ - 返回前后字母的程序