(14.2多继承的构造函数和析构函数】 多继承派生类的构造函数的一般形式如下 参数总表应包括初始化基类数据成员、内嵌对 象数据成员及其他数据成员所需的全部数据。 派生类名::派生类名(参数总表):基类1(参数表1),基类2(参 数表2),…,基类n(参数表n),对象成员1(对象成员参数表1),对象成 员2(对象成员参数表2),…,对象成员n(对象成员参数表n) 派生类中新声明的数据成员初始化语句 是需要用参数初始化的基类名、对象成员名及各自对应的参数表,基类名 和对象成员名之间的顺序可以是任意的,且对于使用默认构造函数的基类 和对象成员,可以不列出基类名和对象成员名。对象成员是指在派生类中 新声明的数据成员,它是属于另外一个类的对象。对象成员必须在初始化 列表中初始化
派生类名::派生类名(参数总表):基类1(参数表1),基类2(参 数表2),…,基类n(参数表n),对象成员1(对象成员参数表1),对象成 员2(对象成员参数表2),…,对象成员n(对象成员参数表n) { 派生类中新声明的数据成员初始化语句 } 参数总表应包括初始化基类数据成员、内嵌对 象数据成员及其他数据成员所需的全部数据。 是需要用参数初始化的基类名、对象成员名及各自对应的参数表,基类名 和对象成员名之间的顺序可以是任意的,且对于使用默认构造函数的基类 和对象成员,可以不列出基类名和对象成员名。对象成员是指在派生类中 新声明的数据成员,它是属于另外一个类的对象。对象成员必须在初始化 列表中初始化。 多继承派生类的构造函数的一般形式如下: 【 14.2 多继承的构造函数和析构函数】
派生类构造函数执行的一般顺序如下 (1)调用基类的构造函数,调用顺序与声明派生类时基类在声明语句中 出现的顺序一致。 (2)调用对象成员的构造函数,调用顺序是按照它们在派生类声明中的 顺序。 (3)调用派生类的构造函数。 例14-2(多继承时构造函数的调用 #includesiostream.h> class a public: AO{cout<"调用类A的构造函数AO"<<end;} A(int a, int b) cout<调用类A的构造函数Aint,int)"<endl;
#include<iostream.h> class A { public: A(){cout<<″调用类A的构造函数A()″<<endl;} A(int a,int b) { x=a; y=b; cout<<″调用类A的构造函数A(int,int)″<<endl; } 例 14-2 多继承时构造函数的调用 (1) 调用基类的构造函数,调用顺序与声明派生类时基类在声明语句中 出现的顺序一致。 (2) 调用对象成员的构造函数,调用顺序是按照它们在 派生类声明中的 顺序。 (3) 调用派生类的构造函数。 派生类构造函数执行的一般顺序如下:
AO{cout<"调用类A的析构函数<<endl;} (续) protected: int x: private: int class B public BO{cout<"调用类B的构造函数B0"<<end B(int c) cout<"调用类B的构造函数B(int)"<end; BO{cout<<"调用类B的析构函数<<endl;} protected int z, class c
~A(){cout<<″调用类 A的析构函数″<<endl;} protected: int x; private: int y; }; class B { public: B(){cout<<″调用类 B的构造函数B()″<<endl;} B(int c) { z=c; cout<<″调用类 B的构造函数B(int)″<<endl; }~B(){cout<<″调用类 B的析构函数″<<endl;} protected: int z; }; class C (续)