【C++面试知识】虚函数的实现机制

阿里面试题,没答出。。

四个字:虚函数表。

1.什么是虚函数表

存放着类中所有虚函数对应的函数指针的表。

2.虚函数的构造过程

图转自:https://www.cnblogs.com/malecrab/p/5572730.html

该过程由编译器完成,也就是说虚函数替换发生编译阶段

3.虚函数调用过程

图转自:https://www.cnblogs.com/malecrab/p/5572730.html

上面pb具体指向的对象类型如何确定呢?(根据虚函数表)

如果pb指向B,那么找到B的虚函数表的地址,再加上bar函数在表中的偏移量就可以找打对应的函数B::bar()了;

如果pb指向D,那么找到D的虚函数表的地址,再加上bar函数在表中的偏移量就可以找打对应的函数D::bar()了;

4.多重继承的类的虚函数表构成

图转自:https://www.cnblogs.com/malecrab/p/5572730.html

一个类继承多个类时,而且子类都有虚函数,该类将有多个虚函数表,每个表的构造过程与单继承一样,每个表都进行拷贝与替换

虚函数调用过程变化不大,只是基类指针指向的位置可能不是派生类对象的起始位置,因为派生类将有多个虚函数表。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值