#include<iostream> using namespace std; class A { public: virtual void fun1() { cout<<"A::fun1"<<endl; } virtual void fun2() { cout<<"A::fun2"<<endl; } virtual void fun3() { cout<<"A::fun3"<<endl; } }; class A1:public A { public: virtual void fun1() { cout<<"A1::fun1"<<endl; } }; class A2:public A { public: virtual void fun2() { cout<<"A2::fun2"<<endl; } virtual void fun3() { cout<<"A2::fun3"<<endl; } }; class B :public A1,public A2 { public: virtual void fun4() { cout<<"B::fun4"<<endl; } }; int main(int argc, char* argv[]) { A1 a1; typedef int Fun; cout<<"A1虚函数表的地址为:"<<(int *)(&a1)<<endl; cout<<"A1第一个虚函数的地址为:"<<(int *) *(int *)(&a1)<<endl; Fun fun1,fun2,fun3,fun4; fun1=( Fun) ( *(int *) *(int *)(&a1)); a1.fun1(); fun2=(Fun) (* ((int *) *(int *)(&a1)+1)); a1.fun2(); fun3=(Fun) (* ((int *) *(int *)(&a1)+2)); a1.fun3(); A2 a2; cout<<"A2虚函数表的地址为:"<<(int *)(&a2)<<endl; cout<<"A2第一个虚函数的地址为:"<<(int *) *(int *)(&a2)<<endl; fun1=( Fun) ( *(int *) *(int *)(&a2)); a2.fun1(); fun2=(Fun) (* ((int *) *(int *)(&a2)+1)); a2.fun2(); fun3=(Fun) (* ((int *) *(int *)(&a2)+2)); a2.fun3(); B b; cout<<"B的第一个虚函数表的地址为:"<<(int *)(&b)<<endl; cout<<"B的第一个虚函数表的第一个虚函数的地址为:"<<(int *) *(int *)(&b)<<endl; fun1=( Fun) ( *(int *) *(int *)(&b)); cout<<fun1<<endl; fun2=(Fun) (* ((int *) *(int *)(&b)+1)); cout<<fun2<<endl; fun3=(Fun) (* ((int *) *(int *)(&b)+2)); cout<<fun3<<endl; fun4=(Fun) (* ((int *) *(int *)(&b)+3)); cout<<fun4<<endl; cout<<"B的第二个虚函数表的地址为:"<<(int *)(&b)+1<<endl; cout<<"B的第二个虚函数表的第一个虚函数的地址为:"<<(int *) *((int *)(&b)+1)<<endl; fun1=( Fun) ( *(int *) *((int *)(&b)+1)); cout<<fun1<<endl; fun2=(Fun) (* ((int *) *((int *)(&b)+1)+1)); cout<<fun2<<endl; fun3=(Fun) (* ((int *) *((int *)(&b)+1)+2)); cout<<fun3<<endl; char ch; while (1) { cin>>ch; } return 0; } 主要就是写了 多重继承下的东西 结果如下