在單繼承的情況下,父類構造先於子類,子類析構先於父類,例:
classa ~a()
};class b : public
a ~b()
};
結果為:
ab~b~a
在多繼承的情況下,此時的構造順序在滿足單繼承構造順序要求的情況下,出現了兩個同級父類的構造順序問題。在這個時候,對於同級父類,構造順序是根據繼承列表從左往右的。析構順序相反。
classa ~a()
};class
b ~b()
};class c : public b, public
a ~c()
};
輸出:
bac~c~a
~b
類中包含類物件的情況下的構造順序:
classa ~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
類內宣告:
classd };
class
m };
上面的寫法不報錯,因為沒有進行物件的定義,只有物件的宣告。所以不需要呼叫d的建構函式。
包含 static 變數:
classm private
:
static
d d;
};
在不進行 static 物件的定義的情況下,進行 m 物件的定義是不報錯的,因為沒有用到 d 類的建構函式。也即是 d 只進行了宣告沒有進行定義。
多區段下構造成員順序:
classa ~a()
};class
b ~b()
};class
d ~d()
private
: b b2;
a a2;
};
輸出結果:
abbad~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 各有 構造,複製構...