#include <stdio.h> #include <stdlib.h> #include <string.h> class A{ protected: virtual void fun(){ printf("class:a function:fun\n"); } virtual void fun2(){ printf("class:a function:fun2\n"); } }; class B:public A{ protected: void fun(){ printf("class:b function:fun\n"); } void fun2(){ printf("class:b function:fun2\n"); } }; int main(){ //输入和输出重定向 freopen("in.txt","r", stdin); freopen("out.txt", "w", stdout); void (*fun)(A*); A* pa = new B(); long fp; memcpy(&fp, pa, 4); memcpy(&fun, reinterpret_cast<long*>(fp), 4); fun(pa); memcpy(&fun, reinterpret_cast<long*>(fp)+1, 4); fun(pa); delete pa; return 0; }
输出结果如下:
class:b function:fun
class:b function:fun2
百度百科的解释: