#include <iostream>
using namespace std;
class Base;
//typedef void(Base::*Fun)(void);
class Base1 {
public:
virtual void f() { cout << "Base1::f" << endl; }
virtual void g() { cout << "Base1::g" << endl; }
virtual void h() { cout << "Base1::h" << endl; }
};
class Base2{
virtual void f() { cout << "Base2::f" << endl; }
virtual void g() { cout << "Base2::g" << endl; }
virtual void h() { cout << "Base2::h" << endl; }
};
class Derive:public Base1,public Base2{
//void f1() { cout << "Derive::f1" << endl; }
virtual void f() { cout << "Derive::f" << endl; }
virtual void g1() { cout << "Derive::g1" << endl; }
virtual void h1() { cout << "Derive::h1" << endl; }
};
typedef void(*Fun)(void);
int main()
{
Derive b;
Fun pFun = NULL;
cout << "虚函数表地址:" << (int*)(&b)<< endl;
cout << "虚函数表--第一个函数地址:" << (int*)*(int*)(&b) << endl;
// cout<<*(int*)(&b)<<endl;
// pFun = &Base::f;
// cout <<(int*)*(int*)(&pFun)<<endl;
// Invoke the first virtual function
printf("第一个虚函数表:\n");
for(int i=0;i<5;i++){
pFun = (Fun)*((int*)*(int*)(&b)+i);
pFun();
}
printf("第二个虚函数表:\n");
for(int i=0;i<3;i++){
pFun = (Fun)*((int*)*((int*)(&b)+1)+i);
pFun();
}
return 0;
}
虚函数表地址:0015FD64
虚函数表--第一个函数地址:00047D44
第一个虚函数表:
Derive::f
Base1::g
Base1::h
Derive::g1
Derive::h1
第二个虚函数表:
Derive::f
Base2::g
Base2::h
请按任意键继续. . .