钻石继承和虚基类

当我们一个类去继承的两个父类有相同的数据成员时,我们想给这个成员赋值就要遇到问题了,我们必须用类名去驱动它,不然我们就不知道到底是给哪个成员赋值,下面举个例子。
这里写图片描述
这样看来是很好的解决我们的问题,但是当我们的父类继承它自己的父类,而我们想从子类中访问父类的父类数据时,我们通过加类名去驱动也可以实现。但是我们明明是修改的同一个数据但是却给的不同的值,和我们现实情况不同。语言可能生涩难懂,我们举个例子看看。
这里写图片描述
图片中可以明显看到我们的m地址不同但是我们m是从同一个地方继承而来,与实际不符。
这里写图片描述
当然,我们的C++发明者肯定比我们更聪明也注意到这个问题,通过加virtual继承解决这个问题。
这里写图片描述
我们把B0就称为虚基类,这样就很好解决我们的问题,大家是不是发现C++很有趣呢。
有了虚基类我们的继承是的构造顺序就发生改变,以前是先按继承顺序构造父类,然后构造成员中的对象,再构造自己。有虚基类后,在继承访问顺序上我们先继承带virtual的。

有错误之处还请指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值