c++中多继承同名隐藏的两种继承方式

虚基类的作用是为了避免派生类从基类中继承过来的同名成员同时产生多个副本。
图解:
祖父类->两个父亲类-》一个孩子类
#include<iostream>
using namespace std;
class base0{
	public:
	int var0;
	void fun0(){cout<<"member of baseo"<<endl;}
};
class base1:virtual public base0{
	public:
	int var1;
};
class base2:virtual public base0{
	public :
	
	int var2;
};
class base:public base1,public base2{
	int var;
	void fun(){cout<<"member of base"<<endl;}
};
int main(){
	base bb;
	bb.var0=2;
	bb.fun0();
	return 0;
}

不用虚基类时

#include<iostream>
using namespace std;
class base0{
	public:
	int var0;
	void fun0(){cout<<"member of baseo"<<endl;}
};
class base1:public base0{
	public:
	int var1;
};
class base2:public base0{
	public :
	
	int var2;
};
class base:public base1,public base2{
	int var;
	void fun(){cout<<"member of base"<<endl;}
};
int main(){
	base bb;
	bb.base1::var0=2;
	bb.base1::fun0();
	bb.base2::var0=3;
	bb.base2::fun0();
	return 0;
}

多继承同名隐藏举例
如果某派生类的多个基类拥有同名的成员,同时,派生类又新增了这样的同名成员,在这种情况下,派生类的成员将隐藏所有基类的同名成员。

一个父亲-》两个孩子类

#include<iostream>
using namespace std;
class base1{
	public:
	int var;
	void fun(){cout<<"member of bse1"<<endl;}
};
class base2{
	public:
	int var;
	void fun(){cout<<"member of base2"<<endl;}
};
class base:public base1,public base2{
	public:
	int var;
	void fun(){cout<<"member of base3"<<endl;}
};
int main(){
	base bb;
	base *mm=&bb;
	bb.var=1;
	bb.fun();
	bb.base1::var=2;
	bb.base1::fun();
	mm->base2::var=3;
	mm->base2::fun();
	return 0;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值