代码
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); 这句一开始不是很理解,但参考博客后豁然开朗。
参考:
1 typedef void* (*fun)(void)讲解
2 C++利用虚函数地址访问虚函数
最后
以上就是烂漫睫毛最近收集整理的关于用虚函数地址访问虚函数的全部内容,更多相关用虚函数地址访问虚函数内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复