菜鸟森林:C++之 多继承与虚继承

一.多继承

  1. 多继承的作用
    实际生活中,一些事物往往会拥有两个或两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念。
    C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。多继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。
  2. 优缺点
    • 多重继承的优点很明显,就是对象可以调用多个基类中的接口
    • 多重继承的缺点是什么呢?如果派生类所继承的多个基类有相同的基类,而派生类对象需要调用这个祖先类的接口方法,就会容易出现二义性

二.浅说多继承与虚继承

  1. 一个派生类可以有很多基类,一个派生类指定多个基类,这样的继承结构被称做多继承。
  2. 多继承语法
    2.1语法:
		class B: 
		{
   
		public:
			int a;
		};
		class A: 
		{
   
		public:
			int a;
		};
		
		class D : public B , public C
		{
   
		public:
			void fun()
			{
   
				//this->a; //error: member 'a' found in multiple base classes of different types
			}
			
		};

2.2 多继承中存在的问题
(1)存放多份数据(且数据内容相同)、存储空间大,据冗余。
(2)容易出现二义性 。。
【1】在继承时,基类之间、或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性——同名二义性。
【2】若使用类名限定,访问起来不方便

2.3 如何解决多继承的二义性情况
(1)解决办法一 – 类名限定 (访问起来不方便)
调用时指名调用的是哪个类的函数,如
c1.A::f();
c1.B::f();
(2) 虚基类(用于有共同基类的场合)
虚基类主要用来解决多继承时,可能对同一基类继承多次从而产生的二义性 , 为派生类提供共同的基类成员,而不重复产生多次拷贝。

  1. 虚继承 (虚继承也是继承的一种扩展)
    3.1 虚继承语法
    (1)提取公因式,提取各父类中相同的成员,构成祖父类(虚基类)
    (2)让各父类,继承祖父类,采用虚继承
    3.2 demo
//封装一个共同的基类
		class Base{
   
		public:
		    Base();
		    //相同的成员
		    void prinT()
		    {
   
		            cout<<"a = "<<endl;
		    }
		    int a ;
		};
		
		class AA : virtual public Base
		{
   
		public:
		    AA();   
		//    void prinT(){
   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值