菱形继承和菱形虚拟继承

c++具有多继承的特性,那么菱形继承就是多继承的一种特殊情况,但是菱形继承会出现一些问题,比如数据冗余和二义性;

那么怎么解决这个问题呢?

菱形虚拟继承

菱形虚拟继承的原理

class A
{
public:
	int _a;
};

class B: virtual public A
{
public:
	int _b;

};
class C :virtual public A
{
public:
	int _c;
};
class D :public B, public C
{
public:
	int _d;
};

int main()
{
	D d;
	d.B::_a = 1;
	d.C::_a = 2;
	d._b = 3;
	d._c = 4;
	d._d = 5;

	return 0;
}

 我们分析下这段代码,由于菱形虚拟继承,所以只有一个A对象被继承了,放在存放在最下面,方便查找,这样设计就解决了数据冗余和二义性的问题,但是比较复杂,

 当我们用派生类赋值给B或者C时,会发生切片,也是这样设计的;

 进行切片赋值的时候,他会自动偏移到自己对应的那个位置;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值