关于多从继承与对象指针解决方法
关于多从继承与对象指针
class A
{
public:
virtual void AA(){};
};
class B
{
public:
virtual void BB(){};
};
class C : public A, public B
{
public:
virtual void AA(){};
virtual void BB(){};
};
int _tmain(int argc, _TCHAR* argv[])
{
C co;
A* a = &co;
B* b = &co;
C* c = &co;
return 0;
}
结果
a与b指针指向相同的地址,与b不同,为什么?
是不是指针的头地址保存的是虚表指针,而多从集成有多个虚表指针,b的指向了以第二个虚表指针开头的地址
------解决方案--------------------
http://hi.baidu.com/mzlog/blog/item/40c260287caf75f08a1399c7.html
------解决方案--------------------
------解决方案--------------------
C中包含A,b两个类型的对象,当转换成基类对象指针时,实际上是有个地址调整使得指针指向正确的基类对象的。所以导致两者的值不一样。
class A
{
public:
virtual void AA(){};
};
class B
{
public:
virtual void BB(){};
};
class C : public A, public B
{
public:
virtual void AA(){};
virtual void BB(){};
};
int _tmain(int argc, _TCHAR* argv[])
{
C co;
A* a = &co;
B* b = &co;
C* c = &co;
return 0;
}
结果
a与b指针指向相同的地址,与b不同,为什么?
是不是指针的头地址保存的是虚表指针,而多从集成有多个虚表指针,b的指向了以第二个虚表指针开头的地址
------解决方案--------------------
http://hi.baidu.com/mzlog/blog/item/40c260287caf75f08a1399c7.html
------解决方案--------------------
------解决方案--------------------
C中包含A,b两个类型的对象,当转换成基类对象指针时,实际上是有个地址调整使得指针指向正确的基类对象的。所以导致两者的值不一样。