1.示例說明 以下面的程式說明函式的執行順序:
1)定義string類,構造和析構會列印其中的字串
2)定義乙個基類base,類中含有兩個string
3)從基類base派生出derive類,類中含有乙個string
每個類函式成員都會將執行函式名列印出來。
struct string
string(const string& s):str(s.str)
string(string&& s):str(std::move(s.str))
string& operator=(const string& s)
string& operator=(string&& s)
~string()
string str;
};//基類
struct base
string b("second");
return 0;
}//定義結果
string():first
string():tmp
~string():tmp
string():second
~string():second
~string():first
--------------------------------
process exited after 0.09922 seconds with return value 0
情形二:
陣列中,構造從底到高,析構從高到低
//陣列中列印
int main(int argc, char** argv)
return 0;
}//列印結果
string():first
string():second
~string():second
~string():first
--------------------------------
process exited after 0.1071 seconds with return value 0
情形三:容器中,構造和析構順序與具體容器實現有關係。int main(int argc, char** argv) ;
cout<< "\nprint vec:";
for(auto &s :vec)
cout<< s.str << " ";
cout《情形五:類構造執行,成員按定義順序構造後再執行建構函式體,析構時,先執行析構函式體,再逆序銷毀成員;
構造順序從右到左int main(int argc, char** argv) {
base base(string("first"), string("second"));
cout<< "測試結束" <
情形六:派生類的構造:基類先構造,而析構則從派生類開始先析構//列印結果
string():third
string():second
string():first
string(const string& s):first
string(const string& s):second
base()
string(const string& s):third
derive()
~string():first
~string():second
~string():third
測試結束
~derive()
~string():third
~base()
~string():second
~string():first
--------------------------------
process exited after 0.1188 seconds with return value 0
C 類構造與析構順序
1.虛基類建構函式被呼叫,以繼承順序從左到右 如果存在虛基類 2.上一層非虛基類建構函式被呼叫,以繼承順序從左到右而非成員初值列上寫的順序 顯示呼叫或缺省構造 如果存在非虛基類 3.虛表指標指向適當虛表 如果類存在虛表指標 4.類資料成員初始化,以宣告的順序而非成員初值列上寫的順序。5.執行使用者所...
c 構造 析構順序
在建立class a的乙個物件的時候,拿new運算子來說,他總是會先去請求一塊該物件期望大小的記憶體,然後呼叫class a的建構函式並傳入所申請記憶體的位址作為this指標完成構造。如果class a有其他類型別的成員變數,或者繼承自其他類的話,他們的構造順序又會是怎樣的呢?下邊是測試 class...
繼承與包含中構造與析構的執行順序
hp 筆試題目 乙個類 a繼承類 b並且包含c,b中包含 d。在構造 a的時候,先構造b中的 d,再構造 b,然後構造a中的 c,最後構造 a。虛構的過程剛好相反。例子如下 include class idcart idcart class person person private idcart ...