多重继承中的虚函数表

看了一个讲类在内存中实现的帖子(http://www.cnblogs.com/jerry19880126/p/3616999.html),觉得讲的不错,但是看完有个地方不太懂,希望懂得同学可以说一下:D
菱形继承:
B 虚拟继承 A,C虚拟继承A,D虚拟继承B、C。
那么计算机在编译时构建D类,会产生三个虚函数表,一个是包含B虚函数、一个包含C虚函数的,最后一个是包含A虚函数的
问题是 那D类自身的虚函数写在哪个表里呢?
#C++工程师#
全部评论
如果D重写了A的a()、B的b()、C的c(),则D的a、b、c三个函数会覆盖ABC三个虚表上相应的函数。另,若D只重写了B的b(),剩下的虚函数都是D新定义的,则D的这些新的虚函数放在B的虚表里面,且是放在B的虚函数后面(前提是继承顺序是先B后C,否则就是放在C的虚表后面)。
点赞 回复 分享
发布于 2017-03-08 16:05
貌似是,如果D重写了父类的虚函数,就会替换掉对应父类虚函数表里的函数
点赞 回复 分享
发布于 2017-03-08 15:25

相关推荐

04-25 18:18
门头沟学院 Java
0425 问了些八股(10min),没问项目,做了三题手撕(50min)在pdd的面试平台,需要共享屏幕。面试官很和蔼,比约的时间早进面试间。不会的也说没事,手撕也提示自我介绍(1min)1. 常见的集合有哪些2. 哈希表有哪些实现方式3. 除了哈希表,还有什么数据结构能实现输入key,找到他的value4. 哈希表怎么实现的5. 为什么链表长度大于8,要用红黑树6. 为什么红黑树是log(n)的时间复杂度7. 优先队列怎么实现的8. 说一下堆怎么实现的,pop之后堆怎么调整9. 说一下TCP协议10. 说一下IP协议11. 说一下HTTP协议和TCP/IP整体关系12. 说一下HTTPS13. 说一下HTTPS的原理14. 说一下公钥、私钥和数字证书15. 为什么一开始要用非对称加密,后来用对称加密16. HTTPS 如何防范中间人攻击手撕1. 给了两个有序的数组(数组中有重复元素),把a中存在,但b中不存在的数据加入新数组2. 一个有序序列构造成二叉搜索树有很多种结构,如何判断两个二叉搜索树是一样的。先说了中序遍历获得序列判断,但面试官提示说能不能一边遍历一边判断,比如最小的数不相等就不往下遍历了3. 给一个字符数组,写一个排序函数,数字排在字母前面,但数字之间相对顺序不变,字母之间相对顺序不变。(原地排序,不能用新数组)
拼多多集团-PDD一面326人在聊 查看40道真题和解析
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客企业服务