虚函数的实现原理--c++虚函数表解析

这里有一篇博客介绍的很详细:c++虚函数表解析

笔记与理解

  1. typedef void(*Fun)(void);// 这是将Fun定义为一个指向 void (void) 函数类型的函数指针
  2. &b;// 得到对象的地址(开头)
    • (int*)(&b);// 虚函数表的地址存在对象最前面的位置的指针中(保证最快的取到虚函数表), 取址,解释为指针
  3. (int*)* (int*)(&b);//对指针解引用,得到指向虚函数表(指针数组)的指针,函数表中存放着指向函数的指针。
  4. *(*(int**)(&b)+2);// 在函数数组中向后移动两位,取出其中的函数指针。
  5. pFun = (Fun)*((int*)*(int*)(&b));// 将函数指针的类型转换为Fun,并赋值给pFun。
  6. pFun();// 调用函数指针对应的函数。

听说配张图更好理解:

对象的首地址其实是指向指针的指针

之前觉得看不懂就是被博主的指针使用给绕进去了,因为存在强制类型转换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值