#include <iostream>
using namespace std;
class A
{
public:
virtual void fun()
{
cout<<"A::fun()"<<endl;
}
};
class B
{
public:
virtual void fun()
{
cout<<"B::fun()"<<endl;
}
virtual void fun2()
{
cout<<"B::fun2()"<<endl;
}
};
class C:public A,B
{
public:
virtual void fun()
{
cout<<"C::fun()"<<endl;
}
virtual void fun1()
{
cout<<"C::fun1()"<<endl;
}
};
void main()
{
A* a = new C();
a->fun();//多态,用基类A的指针调用派生类C的fun方法
//a->fun1();//但可以用以下方法违反C++语义
typedef void(*Fun)(void);
Fun fun = NULL;
fun = (Fun)*((int*)*(int*)a+1);
fun();
//C中有两张虚函数表,这里调用第二张虚函数表中的fun2方法
fun = (Fun)*((int*)*((int*)a+1)+1);
fun();
getchar();
}