[C++]派生类构造函数举例(多继承、含有内嵌对象)

首先,我们需要了解一下派生类构造函数执行的一般次序。

派生类构造函数执行的一般次序:
①调用基类构造函数,调用顺序按照他们被继承时的声明的顺序(从左往右);
②调用内嵌成员对象的构造函数,调用顺序按照他们在类中的声明的顺序;
③派生类的构造函数体重的内容

举例说明:
这是一个具有一般性特征的例子,有三个基类B1、B2和B3,其中B3只有一个默认的构造函数,其余两个基类的成员只是一个带有参数的构造函数。类C由这三个基类经过公有派生而来。派生类新增加了三个私有对象成员,分别是B1、B2和B3类的对象。


例子1-1
#include <iostream>
using namespace std;

class B1{
public:
       B1( int i){cout<<"constructing B1 " <<i<<endl;}
};

class B2{
public:
       B2( int j){cout<<"constructing B2 " <<j<<endl;}
};

class B3{
public:
       B3(){cout<< "constructing B3 * "<<endl;}
};

class C:public B2, public B1, public B3
{
public:
       C( int a, int b, int c, int d):B1(a),memberB2(d),memberB1(c),B2(b){}
private:
       B1 memberB1;
       B2 memberB2;
       B3 memberB3;
};

void main()
{
       C obj(1,2,3,4);
}


结果:
constructing B2 2
constructing B1 1
constructing B3 *
constructing B1 3
constructing B2 4
constructing B3 *

①先根据 class  C: public  B2,  public  B1,  public  B3 依次调用函数;
②再根据B1 memberB1;B2 memberB2; B3 memberB3; 调用函数;
③在构造函数时 C(  int  a,  int  b,  int  c,  int  d):B1(a),memberB2(d),memberB1(c) ,B2(b) {} ,B1和memberB1要同时调用,B2和memberB2也要同时调用,否则会报错


例子1-2
#include <iostream>
using namespace std;

class B1{
public:
       B1( int i){cout<<"constructing B1 " <<i<<endl;}
};

class B2{
public:
       B2( int j){cout<<"constructing B2 " <<j<<endl;}
};

class B3{
public:
       B3( int j){cout<<"constructing B3 " <<j<<endl;} //增加了形参,于是出现数字了
};

class C:public B2, public B1, public B3
{
public:
       C( int a, int b, int c, int d, int e, int f):B1(a),memberB2(d),memberB1(c),B2(b),B3(e),memberB3(f){}
private:
       B1 memberB1;
       B3 memberB3;
       B2 memberB2;//调换了顺序,于是结果变了!
};

void main()
{
       C obj(1,2,3,4,5,6);
}


结果:
constructing B2 2
constructing B1 1
constructing B3 5
constructing B1 3
constructing B3 6
constructing B2 4


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值