简单的继承问题

时间:2011-03-04 22:52:42

标签: c++ casting type-conversion

假设我有以下层次结构:

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。

1 个答案:

答案 0 :(得分:6)

  

为什么aptr&aobj有所不同?

首先,您打印出错误的指针:&aptr是“aptr的地址”,而不是“aptr指向的对象的地址”。您只需打印aptr即可打印“aptr指向的对象的地址”,这可能是您真正想要做的事情。

aptr是指向A的{​​{1}}部分的指针。 dobjaobj A部分的副本

dobjaptr不同,因为它们是不同对象的地址。