关于多重继承的,为啥pA和pC地址相同,而与pB不同?
#include <iostream>
using namespace std;
class ClassA
{
public:
virtual ~ ClassA(){};
virtual void FunctionA(){};
};
class ClassB
{
public:
virtual void FunctionB(){};
};
class ClassC : public ClassA,public ClassB
{
public:
};
void main()
{
ClassC aObject;
ClassA* pA=&aObject;
ClassB* pB=&aObject;
ClassC* pC=&aObject;
cout<<"pA:"<<pA<<endl;
cout<<"pB:"<<pB<<endl;
cout<<"pC:"<<pC<<endl;
system("pause");
}
[解决办法]
Because you put ClassA in the front. By default, compiler put base object from left to right in the front, then derived object. That's why pA has the same address as pC.
[解决办法]
因为ClassA在继承列表的前面,ClassC实例与子类ClassA共用了一个vtable的地址,而ClassB用的另一个vtable地址,cast为ClassB指针时,编译器需要对指针加一个偏移量