C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数
生活随笔
收集整理的這篇文章主要介紹了
C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 繼承的構造函數與多重繼承
如果從多個基類中繼承了相同的構造函數(即形參列表完全相同),則程序將產生錯誤
struct Basel {Basel () = default;Basel (const std::strings);Basel (std::shared_ptr<int>); };struct Base2 {Base2() = default;Base2(const std::strings);Base2(int) ; };// 錯誤: D1試圖從兩個基類中都繼承 Dl::D1(const strings) struct Dl: public Basel, public Base2 {using Basel::Base1;// 從Base1繼承構造函數using Base2::Base2;// 從 Base2 繼承構造函數 }如果一個類從它的多個基類中繼承了相同的構造函數, 則這個類必須為該構造函數定義它
自己的版本:
2. 析構函數
派生類的成員及基類都是自動銷毀的。
- 合成的析構函數體為空。
- 析構函數的調用順序正好與構造函數相反, 在我們的例子中, 析構函數的調用順序是
'Panda、 'Endangered、 'Bear和~ZooAnimal
3. 派生類的拷貝與移動操作
派生類如果定義了自己的拷貝/賦值構造函數和賦值運算符, 則必須在完整的對象上執行拷貝、 移動或賦值操作。
只有當派生類使用的是合成版本的拷貝、 移動或賦值成員時, 才會自動對其基類部分執行這些操作。 在合成的拷貝控制成員中, 每個基類分別使用自己的對應成員隱式地完成構造、 陚值或銷毀等工作。
eg.
step1. 調用 Bear 的拷貝構造函數, 后者又在執行自己的拷貝任務之前先調用 ZooAnimal 的拷貝構造函數。
step2. 調用 Endangered的拷貝構造函數來創建對象相應的部分
step3. Panda的拷貝構造函數
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承之构造函数、析构函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 语言教程(4)列表方法
- 下一篇: C++ Primer 5th笔记(cha