基类和派生类共用一个虚函数表吗?
#include <iostream>
#include <tchar.h>
using namespace std;
class Human
{
public:
virtual void Print()
{
cout << _T("Human::Print") << endl;
}
};
class Man: public Human
{
public:
virtual void Print()
{
cout << _T("Man::Print") << endl;
}
};
int _tmain(int argc, TCHAR argv[], TCHAR envp[])
{
Human Modi;
Man Negi;
int* pModi = (int*)(&Modi);
int* pNegi = (int*)(&Negi);
int* AddrOfModiVTable = (int*)(*pModi);
int* AddrOfNegiVTable = (int*)(*pNegi);
cout << _T("Modi的虚函数表的地址:") << AddrOfModiVTable << endl;
cout << _T("Neig的虚函数表的地址:") << AddrOfNegiVTable << endl;
return 0;
}
函数的执行结果如下:
答案:基类和该基类的派生类不共用同一个虚函数表。
总结:一个有虚函数的类对应一个虚函数表,基类和该基类的派生类不共用一个虚函数表。