#include<iostream>
using namespace std;
class A;
typedef void (A::*lpfn)();
class A
{
public:
lpfn fn;
};
class B:public A
{
public:
void OK(){cout<<"OK"<<endl;}
};
int main(void)
{
B b;
b.fn =(lpfn) &B::OK;
(b.*(b.fn))();/*这个位置比较重点。个人理解是OK代表函数体在类中的偏移量,b.fn=&B::OK,取的时OK的偏移量所在存储单元的
地址,*b.fn得到OK的偏移量,b.*b.fn=b的基地址加上OK在类中的偏移量,得到函数OK所在的内存地址*/
return 0;
}