这里有一篇博客介绍的很详细:c++虚函数表解析
笔记与理解
- typedef void(*Fun)(void);// 这是将Fun定义为一个指向 void (void) 函数类型的函数指针
&b
;// 得到对象的地址(开头)
(int*)(&b);
// 虚函数表的地址存在对象最前面的位置的指针中(保证最快的取到虚函数表), 取址,解释为指针(int*)* (int*)(&b);
//对指针解引用,得到指向虚函数表(指针数组)的指针,函数表中存放着指向函数的指针。*(*(int**)(&b)+2);
// 在函数数组中向后移动两位,取出其中的函数指针。pFun = (Fun)*((int*)*(int*)(&b));
// 将函数指针的类型转换为Fun,并赋值给pFun。- pFun();// 调用函数指针对应的函数。
听说配张图更好理解:
之前觉得看不懂就是被博主的指针使用给绕进去了,因为存在强制类型转换