继承与派生(3):多继承

多继承可以看作是单继承的扩 展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。

 • 多继承是指派生类可以有一个以上的直接基类。多继承的派 生类定义格式为:

class <派生类名>: [<继承方式>] <基类名1>,

                                [<继承方式>] <基类名2>,…

{

<成员说明表>

}; 
 
– 继承方式及访问控制的规定同单继承。

– 派生类拥有所有基类的所有成员。

– 基类的声明次序决定: • 对基类构造函数/析构函数的调用次序    • 对基类数据成员的存储安排。

 例如:

class A {     … };

class B {     … };

class C : public A, public, B {     … };    

其中,派生类C具有两个基类(类A和类B),因此,类C 是多继承的。按照继承的规定,派生类C的成员包含了 基类A,B中成员以及该类本身的成员。 

• 构造函数的执行次序是: – A()、B()、C() (A()和B()实际是在C()的成员初始 化表中调用。)

• 下面的操作是合法的: c.fa(); c.fb(); c.fc(); 

多继承的构造函数 

多继承的情况下,派生类的构造函数格式如下:

<派生类名>(<总参数表>):<基类名1>(<参数表1>), <基类 名2>(<参数表2>),…<子对象名>(<参数表n+1>),…

{     <派生类构造函数体> }  

  其中,<总参数表>中各个参数包含了其后的各个分参数表。      

多继承下派生类的构造函数与单继承下派生类构造函 数相似,它必须同时负责该派生类所有基类构造函数的调用。同时,派生类的参数个数必须包含完成所有基类初始 化所需的参数个数。 

 派生类构造函数执行顺序是: 
 
1、先执行所有基类的构造函数,  

2、再执行派生类本身构造函数, 

3、处于同一层次的各基类构造函数的执行顺序取决于 定义派生类时所指定的各基类顺序,与派生类构造函数 中所定义的成员初始化列表的各项顺序无关。   也就是说,执行基类构造函数的顺序取决于定义派 生类时基类的顺序。可见,派生类构造函数的成员初始 化列表中各项顺序可以任意地排列。 

#include <iostream> 
using namespace std;

class B1   //基类B1
{  public:  
       B1(int i)  
	   {b1=i;  cout<<"constructor B1."<<i<<endl;}  
	   void print()
	   {cout<<b1<<endl;} 
   private: 
	   int b1; 
}; 

class B2   //基类B2
{  public: 
      B2(int i)  { b2=i; cout<<"constructor B2."<<i<<endl;}  
	  void print(){cout<<b2<<endl;}     
   private: 
	  int b2; 
}; 

class B3  //成员类B3
{ public:  
    B3(int i)  
	{ b3=i;  cout<<"constructor B3."<<i<<endl;}  
	int getb3(){return b3;} 
private:  
	int b3;
}; 
class A : public B2, public B1    //注意基类的顺序,调用构造函数的顺序
{ public:  
   A(int i, int j, int k, int l) : B1(i), B2(j), bb(k)  
   { a=l;   cout<<"constructor A."<<l<<endl;  }  
   void print()  { B1::print();   B2::print();   cout<<a<<", "<<bb.getb3()<<endl;  } 
private:  
	int a;   
	B3 bb; 
}; 
int main() 
{ 
	A aa(1,2,3,4);  
   aa.print(); 
   return 0;
} 

 运行结果:


 
 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值