Предположим, у меня есть следующая иерархия:
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 разные? Разве они не должны быть такими же?
Я компилирую в Windows, используя VC ++.
Спасибо,
Де Косто.