多继承时的构造函数
派生类名::派生类名(基类1的形参, 基类2的形参, ... , 基类n的形参, 本类形参) : 基类名1(基类1的形参), 基类名2(基类2的形参), ... , 基类名n(基类n的形参)
{
本类成员初始化赋值语句;
}
多继承时的构造函数
1
派生类与基类的构造函数
当基类中声明有默认形式的构造函数或未声明构造函数时,派生类构造函数可以不向基类构造函数传递参数。
若基类中未声明构造函数,派生类中也可以不声明,全采用缺省形式构造函数。
当基类声明有带形参的构造函数时,派生类也应声明带形参的构造函数,并将参数传递给基类构造函数。
多继承时的构造函数
2
多继承且有内嵌对象时的构造函数
派生类名::派生类名(基类1的形参, 基类2的形参, ... , 基类n的形参, 本类形参) : 基类名1(基类1的形参), 基类名2(基类2的形参), ... , 基类名n(基类n的形参), 对象数据成员的初始化
{
本类非对象数据成员的初始化语句;
}
多继承时的构造函数
3
构造函数的调用次序
,调用顺序按照它们被继承时声明的顺序(从左向右)。
,调用顺序按照它们在类中声明的顺序。
。
多继承时的构造函数
4
拷贝构造函数
若建立派生类对象时调用缺省拷贝构造函数,则编译器将自动调用基类的缺省拷贝构造函数。
若编写派生类的拷贝构造函数,则需要为基类相应的拷贝构造函数传递参数。
例如:
C::C(C &c1) : B(c1)
{…}
多继承时的构造函数
5
例7-5 派生类构造函数举例
#include <iostream>
using namespace std;
class B1 { // 基类B1,构造函数有参数
public:
B1(int i) {
cout << "constructing B1 " << i << endl;
}
};
6
class B2 { // 基类B2,构造函数有参数
public:
B2(int j) {
cout << "constructing B2 " << j << endl; }
};
class B3 { // 基类B3,构造函数无参数
public:
B3( ) {
cout << "constructing B3 *" << endl; }
};
7
class C: public B2, public B1, public B3 {
public: // 派生类的公有成员
C(int a, int b, int c, int d): B1(a),
mB2(d), mB1(c), B2(b) { }
private: // 派生类的私有对象成员
B1 mB1;
B2 mB2;
B3 mB3;
};
void main()
{ C obj(1, 2, 3, 4); }
8
void main( ) {
C obj(1, 2, 3, 4);
}
运行结果:
constructing B2 2
constructing B1 1
constructing B3 *
constructing B1 3
constructing B2 4
constructing B3 *
9
继承时的析构函数
析构函数也不被继承,需在派生类中自行声明
声明方法与一般(无继承关系时)类的析构函数相同。
不需要显式地调用基类的析构函数,系统会自动隐式调用。
析构函数的调用次序与构造函数严格相反。
多继承时的析构函数
10
多继承时的构造函数 来自淘豆网m.daumloan.com转载请标明出处.