C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器
1. 繼承的構造函數
1.1 C++11新標準中,派生類可以重用其直接基類定義的構造函數。
繼承方式是提供一條注明了直接基類名的using聲明語句。
class Bulk_quote : public Disc_quote { public:using Disc_quote::Disc_quote; // inherit Disc_quote's constructorsdouble net_price(std::size_t) const; };<=> derived(parms) : base(args) {}例如: Bulk_quote(const std::string& book,double price,std::size_t qty, double disc):Disc_quote(book,price,qty,disc){}● 構造函數的using聲明不會改變該函數的訪問級別,不能指定explicit或constexpr屬性。
● 派生類不能繼承默認、拷貝和移動構造函數。如果派生類沒有直接定義這些構造函數,則編譯器會為其合成它們。
2. 繼承的構造函數的特點
當一個基類構造函數含有默認實參時,這些默認值不會被繼承。相反,派生類會獲得多個繼承的構造函數,其中每個構造函數分別省略掉一個含有默認值的形參。
eg. 基類有一個接受兩個形參的構造函數,其中第二個形參含有默認實參,則派生類將獲得兩個構造函數,一個構造函數接受兩個形參(沒有默認實參),另一個只接受一個形參,它對應于基類中最左側的沒有默認值的那個形參。
大多數情況下派生類會繼承基類的構造函數,則除兩種情況:
● 派生類可以繼承一部分構造函數,而為其他構造函數定義自己的版本,如果派生類定義的構造函數與基類的構造函數具有相同的參數列表,則該構造函數將不會被繼承,定義在派生類中的構造函數將替換繼承而來的構造函數。
● 默認、拷貝、移動構造函數不會被繼承,這些構造函數按照正常規則被合成。如果一個類只含有繼承的構造函數,則它將擁有一個合成的默認構造函數。
2.容器與繼承
● 當我們使用容器存放繼承體系中的對象時,通常必須采用間接存儲的方式。
● 派生類對象直接賦值給積累對象,其中的派生類部分會被切掉。
● 在容器中放置(智能)指針而非對象。
● 對于C++面向對象的編程來說,一個悖論是我們無法直接使用對象進行面向對象編程。相反,我們必須使用指針和引用。因為指針會增加程序的復雜性,所以經常定義一些輔助的類來處理這些復雜的情況。
總結
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha