多继承时的构造函数

来源:互联网 发布:数据段字节变量 编辑:程序博客网 时间:2024/06/16 12:42
  多继承时的构造函数


格式:
派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数), 基类名2(参数), ...基类名n(参数)
{
        本类成员初始化赋值语句;
};




  派生类与基类的构造函数
1.当基类中声明有缺省形式的构造函数或未声明构造函数时,派生类构造函数的声明中可以省略对基类构造函数的调用。
若基类中未声明构造函数,派生类中也可以不声明,全采用缺省形式构造函数。
当基类声明有带形参的构造函数时,派生类也应声明带形参的构造函数,提供将参数传递给基类构造函数的途径。






举例:
#include <iostream>
using namespace std;
class B1 //基类B1,构造函数有参数
{public:
B1(int i) {cout<<"constructing B1 "<<i<<endl;}
};
class B2 //基类B2,构造函数有参数
{public:
B2(int j) {cout<<"constructing B2 "<<j<<endl;}
};
class B3 //基类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;
};
int main()
{
C obj(1,2,3,4);
    return 0;
}


答案:
constructing B2 2      
constructing B1 1
constructing B3 *
constructing B1 3    这次构造是由于创造了对象,B1 memberB1  
constructing B2 4    这次构造是由于创造了对象, B2 memberB2
constructing B3 *    这次构造是由于创造了对象, B3 memberB3