虚继承

直入主题:为什么虚继承能够解决“菱形继承”?
(阅读下文之前可参考下我之前总结的“ 虚函数的本质”和“ 多重继承”。)

经过gdb调试,终于揭开了面纱。
下例类结构:
          Base
          /        \
DerivedA DerivedB
          \        /
        Derived

在非虚继承时,DerivedA和DerivedB都会继承Base的数据,从而Derived会继承2份相同的Base数据,形成“菱形继承”。

而在虚继承时,DerivedA和DerivedB都会继承Base的数据,但是Derived只会继承1份(DerivedA中)的Base数据,不会形成“菱形继承”。 (都是编译器搞的鬼)

注意:虚继承会生成虚函数指针(_vptr)和虚函数表(_vtable)。
 
比较下下面的数据,就会一目了然。  

1. 非虚继承(数据data+非函数test())
{<DerivedA> = {<Base> =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值