|
C++中虚函数调用采用所谓的虚函数表(vtable)实现,对于简单的单继承,其实现如下图所示: (其中ClassA为ClassB的基类,详见深入浅出MFC P68) 对于这种情况,显然可以想到,vtable直接定位到对象的函数即可
 你也许会想到:C++支持多继承,在多继承的情况下,vatble以及内存布局该如何实现? 以下也许就是你想要的答案
代码:C继承于A和B,运行环境VC6.0
class A
 ...{
public:
int a, b;
virtual void show();
};

class B
 ...{
public:
int a, b;
virtual void show();
};

class C:public A,public B
 ...{
public:
int a, b;
virtual void show();
};

 void A::show()...{}
 void B::show()...{}
 void C::show()...{ cout<<"c.a="<<a<<", c.b="<<b<<endl;}

int main()
 ...{
cout<<"a.size="<<sizeof(A)<<endl;
cout<<"b.size="<<sizeof(B)<<endl;
cout<<"c.size="<<sizeof(C)<<endl;

A a;
B b;
C c;

a.a=1;
a.b=2;
b.a=3;
b.b=4;
c.a=5;
c.b=6;

cout<<"a="<<&a<<endl;
cout<<"b="<<&b<<endl;
cout<<"c="<<&c<<endl;

A* pa;
B* pb;
pa = &c;
pb = &c;

cout<<"pa="<<pa<<endl;
cout<<"pb="<<pb<<endl;
pa->show();
pb->show();

int *p=(int *)&c;
while((int)p <= (int)&a.b)
 ...{
cout<<p<<" "<<*p<<endl;
p++;
}

return 0;
}
程序输出:

共2页: 上一页 1 [2] 下一页
|