gpt4 book ai didi

c++ - 对于多态类的对象,对象的地址和指向对象的指针是否相同?

转载 作者:行者123 更新时间:2023-11-30 01:13:50 25 4
gpt4 key购买 nike

我正在尝试解决一个 C++ 测试,并看到了这个问题。

#include <iostream>

class A
{
public:
A() : m_i(0) { }

protected:
int m_i;
};

class B
{
public:
B() : m_d(0.0) { }

protected:
double m_d;
};

class C
: public A
, public B
{
public:
C() : m_c('a') { }

private:
char m_c;
};

int main()
{
C c;
A *pa = &c;
B *pb = &c;

const int x = (pa == &c) ? 1 : 2;
const int y = (pb == &c) ? 3 : 4;
const int z = (reinterpret_cast<char*>(pa) == reinterpret_cast<char*>(pb)) ? 5 : 6;

std::cout << x << y << z << std::endl;

return 0;
}

Output :

136

谁能解释一下它的输出?我以为base指针指向的是base部分的部分,所以不是对象的真实地址。

谢谢。

最佳答案

pa 指向cA 子对象。 pb 指向cB 子对象。显然,它们指向内存中的不同位置(因此输出中的 6)。

但是当它们与&c比较时,&c再次分别转换为A*B* ,因此指向相同的 AB 子对象。

这是为了说明 c 在内存中的可能布局:

+------------------------+-------------+-------------------+
| A subobject | B subobject | Remainder of C |
+------------------------+-------------+-------------------+
^ &c is here ^ pb points here
^ pa also points here

关于c++ - 对于多态类的对象,对象的地址和指向对象的指针是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31148488/

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