代码
class Base
{
public:
Base(){ cout << "base class init!"; };
virtual void func()
{
cout << "虚函数。。" << endl;
}
virtual void func1()
{
cout << "虚函数1。。" << endl;
}
virtual void func2()
{
cout << "虚函数2。。" << endl;
}
private:
int a;
int b;
};
int main() {
Base tmp;
//获取虚表首地址
long long* p = (long long*)(*((long long*)(&tmp)));
cout <<"虚表首地址:" << p << endl;
// 定义函数指针Fun,指向返回类型为void、参数为void的函数
typedef void(*Fun)(void);
//定义一个函数指针 fun
Fun fun;
//保存虚函数的地址
fun = (Fun)*p;//强制类型转换为该函数指针类型
fun();//调用虚函数
fun = (Fun) * (p + 1);
fun();
fun = (Fun) * (p + 2);
fun();
system("pause");
return 0;
}
其中对 typedef void(*Fun)(void);
这句一开始不是很理解,但参考博客后豁然开朗。