当前位置: 首页 > news >正文

C++单继承虚函数表探索

在vs2022中,虚函数表在监视窗口和内存里显示不全,可以采用以下方法来查看所有虚函数地址:

定义函数指针,因为虚函数表本质上是一个函数指针数组,其中每个指针都指向一个虚函数,因此我们只需要取到这个虚函数表就可以查看每个虚函数的地址

//单继承虚函数表探索
class Base
{
public:virtual void func1() { cout << "Base::func1()" << endl; }virtual void func2() { cout << "Base::func2()" << endl; }
private:int a;
};class Derive :public Base
{
public:virtual void func1() { cout << "Derive::func1()" << endl; }virtual void func3() { cout << "Derive::func2()" << endl; }virtual void func4() { cout << "Derive::func4()" << endl; }void func5() { cout << "Derive::func5()" << endl; }
private:int b;
};typedef void(*VFPTR)();
void PrintVTable(VFPTR* vtable)
{cout << "虚函数表地址是:" << vtable << endl;for (int i = 0; vtable[i] != nullptr; i++){printf("第%d个虚函数地址是: ", i);printf("0x%p", vtable[i]);VFPTR f = vtable[i];f();}cout << endl;
}int main()
{Base b;Derive d;VFPTR* vtable1 = (VFPTR*)(*(int*)&b);VFPTR* vtable2 = (VFPTR*)(*(int*)&d);PrintVTable(vtable1);PrintVTable(vtable2);return 0;
}

http://www.dtcms.com/a/328236.html

相关文章:

  • 京东方 DV133FHM-NN1 FHD13.3寸 工业液晶模组技术档案
  • 玩转Docker | 使用Docker部署Radicale日历和联系人工具
  • [激光原理与应用-250]:理论 - 几何光学 - 透镜成像的优缺点,以及如克服缺点
  • 万物平台模型导入样例大全(实时更新中~)
  • SM4对称加密算法的加密模式介绍
  • JavaEE 初阶第十八期:叩开网络世界的大门(上)
  • ffmpeg-AVFilter 和 Filter Graph 使用指南
  • ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及测试(二)
  • Stereolabs ZED相机 选型指南:双目 / 单目、短距 / 长距,如何为机器人视觉系统匹配最优方案?
  • 力扣-394.字符串解码
  • 【模型剪枝2】不同剪枝方法实现对 yolov5n 剪枝测试及对比
  • Homebrew 入门教程(2025 年最新版)
  • 获取虚谷数据库所有表名、表注释、字段名、字段类型、字段注释到word中
  • clickhouse基础概念及集群部署
  • 疏老师-python训练营-Day43复习日
  • Qwen-Image(阿里通义千问)技术浅析(一)
  • 谷歌 Web Guide 如何重塑搜索排名及其 SEO 影响
  • python技巧:控制转台的2个坑。
  • 从关键词到智能决策:孟庆涛如何用GEO重塑AI时代的搜索优化范式
  • 2025年受自适应差分进化-无人机路径规划的统一元启发式框架-附Matlab完整代码
  • 云计算核心技术
  • 附表B 正则表达式符号列表
  • Java缓冲流
  • Spring面试宝典
  • FPGA自学——FIFO缓存器
  • 游戏中角色持枪:玩家操控角色,角色转向时枪也要转向
  • 西门子PLC跨代通讯实战:S7-200通过以太网模块与S7-1500数据交互
  • PFC是什么
  • 【数模技巧】使用python将.xlsx文件转换为CSV文件
  • 大模型-QAT介绍