假设我有以下层次结构:
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;
}
当我在main中输入以下代码时:
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上编译。
谢谢, De Costo。
答案 0 :(得分:6)
为什么
aptr
和&aobj
有所不同?
首先,您打印出错误的指针:&aptr
是“aptr
的地址”,而不是“aptr
指向的对象的地址”。您只需打印aptr
即可打印“aptr
指向的对象的地址”,这可能是您真正想要做的事情。
aptr
是指向A
的{{1}}部分的指针。 dobj
是aobj
A
部分的副本。
dobj
和aptr
不同,因为它们是不同对象的地址。