class A
{
public:
A(){};
~A(){};
int a,b;
virtual int getb(){return b;};
virtual int geta(){return a;}
}
class B : public A
{
public:
........
virtual int getb(){return b;};
virtual int geta(){return a;}
}
sizeof(B); 他的大小就不再是 8了 因为有一个虚函数表
内存结构
0:虚函数表
4:int a;
8: int b;
---------------
A *p = new B();
p->geta();
调用 geta()他的汇编内容是
{
ecx = p; 假如 ecx 指向了 new B() 对象
mov eax,[ecx] //获取虚函数表
call [eax+4] //调用虚函数
}