#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:
};
int main()
{
ClassC aObject;
ClassA* pA = &aObject;
ClassB* pB = &aObject;
ClassC* pC = &aObject;
cout << (int)pA <<endl;
cout << (int)pB <<endl;
cout << (int)pC <<endl;
return 0;
}
判断三个输出之间的关系:
由于有虚函数的存在,导致C++在默认情况下会有虚指针的存在,所以在aObject中,地址最开始处应该是一个虚指针,如果将aObject赋值给pB,由于ClassB不存在虚函数,所以要跳过虚指针,所以他们的关系是:
pA == pC
pB == pC + 4 //虚指针的大小