#include <iostream>
using namespace std;
class A{
public:
A(int a):a1(a){}
virtual void a(){cout<<"A::a()"<<endl;}
int a1;
};
class B: public virtual A{
public:
B(int a,int b):A(a), b1(b){}
virtual void b(){cout<<"B::b()"<<endl;}
int b1;
};
class C: public virtual A{
public:
C(int a, int c):A(a), c1(c){}
virtual void c(){cout<<"C::c()"<<endl;}
int c1;
};
class D: public B, public C{
public:
D(int a, int b, int c, int d):A(a),B(a,b),C(a,c),d1(d){}
virtual void a(){cout<<"D::a()"<<endl;}
virtual void b(){cout<<"D::b()"<<endl;}
virtual void c(){cout<<"D::c()"<<endl;}
virtual void d(){cout<<"D::d()"<<endl;}
int d1;
};
typedef void(*func)(void);
int main(void)
{
cout<<sizeof(D)<<endl;
D d(1,2,3,4);
int *pd = (int*)(&d);
int* p = (int*)*pd;
cout<<"virtual table of B:"<<endl;
((func)*p++)();
((func)*p++)();
((func)*p++)();
((func)*p++)();
cout<<*p++<<endl;
cout<<*p++<<endl;
cout<<*p<<endl;
// ((func)*p++)();
cout<<endl<<"virtual table of C:"<<endl;
p = (int*)(*(pd+2));
((func)*p++)();
cout<<*p++<<endl;
cout<<*p++<<endl;
cout<<*p++<<endl;
// ((func)*p++)();
cout<<"a1="<<*(pd+6)<<endl;
cout<<"b1="<<*(pd+1)<<endl;
cout<<"c1="<<*(pd+3)<<endl;
cout<<"d1="<<*(pd+4)<<endl;
cout<<"B.a1="<<((B*)(&d))->a1<<endl;
cout<<"C.a1="<<((C*)(&d))->a1<<endl;
return 0;
}
C++ 继承,虚表内容
最新推荐文章于 2022-10-18 23:20:54 发布