//基類與衍生類別的對應關係//單繼承:衍生類別只從一個基類派生。//多繼承:衍生類別從多個基類派生。//多重派生:由一個基類派生出多個不同的衍生類別。//多層派生:衍生類別又作為基類,繼續派生新的類。//class 衍生類別名:繼承方式1 基類名1,繼承方式2 基類名2,...//{// 成員聲明;//}//注意:每一個"繼承方式",只用於限制對緊隨其後之基類的繼承。//繼承時的建構函式://基類的建構函式不被繼承,需要在衍生類別中自行聲明。//聲明建構函式時,只需要對本類中新增成員進行初始化,對繼承來的基類成員的初始化由基類完成。//多繼承時的建構函式://衍生類別名::衍生類別名(基類1形參,基類2形參,...基類n形參,本類形參):基類名1(參數), 基類名2(參數), ...基類名n(參數)//{// 本類成員初始化指派陳述式;//};//衍生類別與基類的建構函式://當基類中聲明有預設形式的建構函式或未聲明建構函式時,衍生類別建構函式的聲明中可以省略對基類建構函式的調用。//若基類中未聲明建構函式,衍生類別中也可以不聲明,全採用預設形式建構函式。//當基類聲明有帶形參的建構函式時,衍生類別也應聲明帶形參的建構函式,提供將參數傳遞給基類建構函式的途徑。//建構函式的調用次序://1. 調用基類建構函式,調用順序按照它們被繼承時聲明的順序(從左向右)。//2. 調用成員對象的建構函式,調用順序按照它們在類中聲明的順序。//3. 衍生類別的建構函式體中的內容。//衍生類別建構函式舉例:#include <iostream.h>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(void){C obj(1,2,3,4);return 0; }
//多繼承且有內嵌對象時的建構函式://衍生類別名::衍生類別名(基類1形參,基類2形參,...基類n形參,本類形參):基類名1(參數), 基類名2(參數), ...基類名n(參數),對象資料成員的初始化//{// 本類成員初始化指派陳述式;//};//建構函式的調用次序//1. 調用基類建構函式,調用順序按照它們被繼承時聲明的順序(從左向右)。//2. 調用成員對象的建構函式,調用順序按照它們在類中聲明的順序。//3. 衍生類別的建構函式體中的內容。//衍生類別解構函式舉例#include <iostream.h>class B1//基類B1聲明{public:B1(int i){ cout<<"constructing B1 "<<i<<endl;}~B1() {cout<<"destructing B1 "<<endl;}};class B2//基類B2聲明{public:B2(int j) {cout<<"constructing B2 "<<j<<endl;}~B2() {cout<<"destructing B2 "<<endl;}};class B3//基類B3聲明{public:B3(){cout<<"constructing B3 *"<<endl;}~B3() {cout<<"destructing 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(void){C obj(1,2,3,4); return 0;}