请教,通过操作对象地址调用虚函数
typedef void(*Fun)(void);
Derive d; //含有虚函数
Fun pFun = (Fun)*((int*)*(int*)(&d)+0);
那么(int*)(&d)+0;就是虚函数表的地址
而 (int*)*(int*)(&d)+0;是第一个虚函数的地址了
这样的话,再将这个地址转换成函数类型的地址就行了
就应该是 (Fun)((int*)*(int*)(&d)+0); 但这样会出错,
正确做法是 (Fun)*((int*)*(int*)(&d)+0);
为什么呢???