C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器
1. 繼承的構(gòu)造函數(shù)
1.1 C++11新標(biāo)準(zhǔn)中,派生類可以重用其直接基類定義的構(gòu)造函數(shù)。
繼承方式是提供一條注明了直接基類名的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){}● 構(gòu)造函數(shù)的using聲明不會(huì)改變?cè)摵瘮?shù)的訪問級(jí)別,不能指定explicit或constexpr屬性。
● 派生類不能繼承默認(rèn)、拷貝和移動(dòng)構(gòu)造函數(shù)。如果派生類沒有直接定義這些構(gòu)造函數(shù),則編譯器會(huì)為其合成它們。
2. 繼承的構(gòu)造函數(shù)的特點(diǎn)
當(dāng)一個(gè)基類構(gòu)造函數(shù)含有默認(rèn)實(shí)參時(shí),這些默認(rèn)值不會(huì)被繼承。相反,派生類會(huì)獲得多個(gè)繼承的構(gòu)造函數(shù),其中每個(gè)構(gòu)造函數(shù)分別省略掉一個(gè)含有默認(rèn)值的形參。
eg. 基類有一個(gè)接受兩個(gè)形參的構(gòu)造函數(shù),其中第二個(gè)形參含有默認(rèn)實(shí)參,則派生類將獲得兩個(gè)構(gòu)造函數(shù),一個(gè)構(gòu)造函數(shù)接受兩個(gè)形參(沒有默認(rèn)實(shí)參),另一個(gè)只接受一個(gè)形參,它對(duì)應(yīng)于基類中最左側(cè)的沒有默認(rèn)值的那個(gè)形參。
大多數(shù)情況下派生類會(huì)繼承基類的構(gòu)造函數(shù),則除兩種情況:
● 派生類可以繼承一部分構(gòu)造函數(shù),而為其他構(gòu)造函數(shù)定義自己的版本,如果派生類定義的構(gòu)造函數(shù)與基類的構(gòu)造函數(shù)具有相同的參數(shù)列表,則該構(gòu)造函數(shù)將不會(huì)被繼承,定義在派生類中的構(gòu)造函數(shù)將替換繼承而來的構(gòu)造函數(shù)。
● 默認(rèn)、拷貝、移動(dòng)構(gòu)造函數(shù)不會(huì)被繼承,這些構(gòu)造函數(shù)按照正常規(guī)則被合成。如果一個(gè)類只含有繼承的構(gòu)造函數(shù),則它將擁有一個(gè)合成的默認(rèn)構(gòu)造函數(shù)。
2.容器與繼承
● 當(dāng)我們使用容器存放繼承體系中的對(duì)象時(shí),通常必須采用間接存儲(chǔ)的方式。
● 派生類對(duì)象直接賦值給積累對(duì)象,其中的派生類部分會(huì)被切掉。
● 在容器中放置(智能)指針而非對(duì)象。
● 對(duì)于C++面向?qū)ο蟮木幊虂碚f,一個(gè)悖論是我們無法直接使用對(duì)象進(jìn)行面向?qū)ο缶幊獭O喾?#xff0c;我們必須使用指針和引用。因?yàn)橹羔槙?huì)增加程序的復(fù)雜性,所以經(jīng)常定義一些輔助的類來處理這些復(fù)雜的情況。
總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 15 OOP)继承的构造函数容器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: IPFS (1) 初步简介