参考资料:
代码:
(代码与图不对应)class CA
{
virtual show1()
{
cout<<"1 show";
}
virtual void show2()
{
cout<<"a2 show";
}
};
class CB : public CA
{
//覆盖
void show2()
{
cout<<"b2 show";
}
};
void main()
{
CB* a = new CB();
int* pVT = (int*)*((int*)(a));//虚函数表的入口地址
fun * fu = (fun*)(pVT+1);//取的是虚函数表的第二个虚函数,调用CB::show2()
(*fu)();
int* pVT = (int*)*((int*)(a));//虚函数表的入口地址
fun * fu = (fun*)(pVT+1);//取的是虚函数表的第二个虚函数,调用CB::show2()
(*fu)();
fu = (fun*)(pVT+1);//取的是虚函数表的第一个虚函数,调用show1()
(*fu)();
getchar();
(*fu)();
getchar();
}