c 類的構造順序

2022-08-20 03:24:08 字數 1616 閱讀 3936

在單繼承的情況下,父類構造先於子類,子類析構先於父類,例:

class

a ~a()

};class b : public

a ~b()

};

結果為:

ab~b

~a

在多繼承的情況下,此時的構造順序在滿足單繼承構造順序要求的情況下,出現了兩個同級父類的構造順序問題。在這個時候,對於同級父類,構造順序是根據繼承列表從左往右的。析構順序相反。

class

a ~a()

};class

b ~b()

};class c : public b, public

a ~c()

};

輸出:

bac

~c~a

~b

類中包含類物件的情況下的構造順序:

class

a ~a()

};class b : public

a ~b()

};class c : public b, public

a ~c()

};class d : public

b ~d()

private

: c c;

a a;

};

輸出結果為:

a  //

d 繼承 b,b 繼承 a,所以順序為 a, b

ba

//定義 c 的物件,c 繼承順序中第乙個是 b,b 繼承 a,所以是 a, b

ba

//c 繼承順序中的第二個

c //

c 的定義

a //

d 中引數 ad~d

~a~c

~a~b

~a~b

~a

類內宣告:

class

d };

class

m };

上面的寫法不報錯,因為沒有進行物件的定義,只有物件的宣告。所以不需要呼叫d的建構函式。

包含 static 變數:

class

m private

:

static

d d;

};

在不進行 static 物件的定義的情況下,進行 m 物件的定義是不報錯的,因為沒有用到 d 類的建構函式。也即是 d 只進行了宣告沒有進行定義。

多區段下構造成員順序:

class

a ~a()

};class

b ~b()

};class

d ~d()

private

: b b2;

a a2;

};

輸出結果:

abb

ad~d~a

~b~b

~a

就像上述**,不管交換訪問區還是訪問許可權,始終都是按照從上到下的順序進行構造.

c 類構造順序

include using namespace std class a 結果和分析 a 1 父類a的建構函式 a 2 父類b中a的建構函式 a 3 父類b中成員變數b初始化 呼叫父類a的建構函式 b 4 父類b中成員變數b初始化 呼叫父類b的建構函式 a 5 c中成員變數b 的構造ab a 6 c中...

c 類構造順序

include using namespace std class a 結果和分析 a 1 父類a的建構函式 a 2 父類b中a的建構函式 a 3 父類b中成員變數b初始化 呼叫父類a的建構函式 b 4 父類b中成員變數b初始化 呼叫父類b的建構函式 a 5 c中成員變數b 的構造ab a 6 c中...

c 組合類的構造,複製構造,析構順序

先貼 include using namespace std class cat public cat int intialage catage intialage cout 餘童蘭上課習題,被點名回答,沒答案上來 有兩個類 cat和 dog zoo乙個組合類,包含cat和dog 各有 構造,複製構...