虚基类解决多继承同名二义性

之前提过关于公有多继承存在同名二义性问题,所以c++才会有虚基类来解决这类的问题。
虚基类继承,使得基类的多个虚基继承派生类中的同名成员,存在于相同的地址,也就是同一个东西,所以当他们共同有一个派生类时,这个派生类所继承的不是俩个同名成员,其实只有一个,故不发生二义性问题
构造调用顺序:先调用base(调用直接基类时,直接基类是由base继承过来),接着根据base3的继承申明,依次调用基类,从结果可知确实如此;析构顺序相反

#include<iostream>
using namespace std;
class base{
	public:
		base()
		{
			a=5;
			cout<<"base a ="<<a<<endl;
		}
	protected:
		int a;
};
class base1:virtual public base{
	public:
		base1()
		{
			a+=10;
			cout<<"base1 a ="<<a<<endl;
		}
};
class base2:virtual public base{
	public:
		base2()
		{
			a+=20;
			cout<<"base2 a ="<<a<<endl;
		}
};
class base3:public base1,public base2{
	public:
		base3()
		{
			cout<<"base3 a ="<<a<<endl;
		}
};
int main()
{
	base3 obj;
	return 0;
}

以下时掉用结果
base a =5
base1 a =15
base2 a =35
base3 a =35


Process exited after 0.2931 seconds with return value 0
请按任意键继续. . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值