C++类中的继承问题

多继承

一个派生类可以继承多个基类, 获取多个基类的功能接口和数据成员,提高代码的复用性。 

语法:

class 派生类 :继承方式 基类 ,继承方式 基类2  ........
{
    
}
例子: 
class base : public  base1 ,public  base2 
 			
 构造函数的执行顺序: base1 -> base2 -> base 
 析构函数的执行顺序:  base -> base2 -> base1 
    
//提示: 哪一个先继承,那么就先执行他的构造 ,从左 -》 右

多继承的参数列表初始化:

class base_a
{
public:
base_a(int a):a(a){}
int a;
};

class base_b
{
public:
base_b(int b):b(b){}
int b;
};

class base_all:public base_a ,public  base_b
{
public:
   base_all(int a,int b,int c):base_a(a),base_b(b),c(c){}
int c;

  void show()
  {
      cout << a << endl;
      cout << b << endl; 
      cout << c << endl;
  }
};

多级继承

语法:

class 基类名  
class 派生类 :继承方式 基类名 
class 派派生类 : 继承方式  派生类 

例子: 
class  base 
class  base_a :public base 
class  base_b :public base_a

构造函数的执行顺序:  base  -> base_a  ->  base_b 
析构函数的执行顺序:  base_b -> base_a ->   base  

多级继承的参数列表初始化

两种继承方式的框架图:

菱形继承

菱形继承会出现一个二义性问题,导致派生类无法调用,基类的所有功能函数!!

菱形继承的二义性解决方式

1.利用 域操作符,指定使用哪一个基类中的函数方法 
      a.base_a::show(); 
      a.base_b::show(); 
2.利用 基类引用派生类,再调用出现二义性的方法  
       base_a &q=a; 
	   base_b &q=a; 

3.在派生类中重写出现二义性的方法,把之前的隐藏掉。  
    
4.最强的处理方法: 利用虚继承,让base 的空间存放在虚表中,不构造两次!! 
base: 
base_a :virtual  public  base     //-> base_a 虚继承base -》 系统就会把 base 放到虚表中
base_b :virtual  public  base    //->base_b 虚继承base -> base_b 发现虚表已经存在base了就直接使用不再分配。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值