假设我具有以下层次结构:
class A
{
public:
A()
private:
int aa;
}
class B: public A
{
public:
B()
private:
int bb;
}
class D: public B
{
public:
D()
private:
int dd;
}
当我在主代码中键入以下代码时:
D dobj;
std::cout<<"Address of D object: "<<&dobj<<std::endl;
A aobj = static_cast<A>(dobj);
A* aptr = static_cast<A*>(&dobj);
std::cout<<"Address of D object: "<<&dobj<<std::endl;
std::cout<<"Address of aptr object: "<<&aptr<<std::endl;
std::cout<<"Address of A object: "<<&aobj<<std::endl;
输出为:
Address of dobj object: 0012FF0C
Address of dobj object: 0012FF0C
Address of aptr object: 0012FF18
Address of aobj object: 0012FF14
为什么aptr和aobj的地址不同?他们不应该是一样的吗?
为什么dobj和aptr的地址不同?他们不应该也一样吗?
我正在使用VC ++在Windows上进行编译。
谢谢,
德科斯托。
最佳答案
为什么aptr
和&aobj
不同?
首先,您要打印出错误的指针:&aptr
是“ aptr
的地址”,而不是“ aptr
指向的对象的地址”。您只需要打印aptr
即可打印“ aptr
指向的对象的地址”,这大概就是您真正想要做的。aptr
是指向A
的dobj
部分的指针。 aobj
是A
的dobj
部分的副本。aptr
和&aobj
不同,因为它们是不同对象的地址。