Boolan-C++開發(fā)工程師-泛型編程-第一周筆記

C++泛型編程

1. Conversion function轉(zhuǎn)換函數(shù)


圖中,黃色部分即為轉(zhuǎn)換函數(shù),轉(zhuǎn)換函數(shù)不需要加返回類型,不需要調(diào)用參數(shù),通常加const。轉(zhuǎn)換函數(shù)的作用就是在需要以另外的類型使用一個(gè)對象時(shí),自動(dòng)的將該對象轉(zhuǎn)換為該類型。

如上圖的實(shí)例測試所示,自動(dòng)的將Fraction型對象f轉(zhuǎn)換為double類型。

2. non-explicit-one-argument ctornon-explicit的單實(shí)參構(gòu)造函數(shù)


上圖中的綠色部分為該類的構(gòu)造函數(shù),可以以單實(shí)參的形式調(diào)用。在語句Fraction d2=f+4中,f只能與Fraction對象相加,編譯器就自動(dòng)的把4轉(zhuǎn)為Fraction(4,1)。

注意:在需要起碼兩個(gè)實(shí)參的構(gòu)造函數(shù)中,不會(huì)自動(dòng)完成該轉(zhuǎn)換。

注意:當(dāng)轉(zhuǎn)換函數(shù)和non-explicit單實(shí)參構(gòu)造函數(shù)同時(shí)存在時(shí),語句d2=f+4會(huì)報(bào)錯(cuò),因?yàn)榫幾g器不知道是調(diào)用轉(zhuǎn)換函數(shù)還是調(diào)用構(gòu)造函數(shù)。但如果在構(gòu)造函數(shù)前面加聲明符explicit的話,構(gòu)造函數(shù)將不會(huì)被隱式調(diào)用。

3. pointer-like classes,像指針的類

用類來模擬指針的行為,這樣能實(shí)現(xiàn)指針的功能,能像指針一樣使用,但同時(shí)也能實(shí)現(xiàn)更多的功能。比如智能指針shared_ptr、迭代器iterator都是像指針的類。

4. function-like classes,仿函數(shù)

仿函數(shù)最大的特征就是對operator()進(jìn)行重載,這樣調(diào)用“類名()”這樣的語句時(shí),會(huì)使其像函數(shù)一樣被調(diào)用,但實(shí)際上是調(diào)用了類中的operator()。

下圖就是STL中的部分仿函數(shù)。


仿函數(shù)都會(huì)繼承這樣一個(gè)base classes:


5. namespace命名空間

這個(gè)沒什么好談了,就是個(gè)命名空間而已,防標(biāo)識符沖突用的。

6. classes template,類模板

這個(gè)簡單,不說了,自己看圖體會(huì)。


7. function template,函數(shù)模板

這個(gè)也簡單,看圖體會(huì)

8. member template,成員模板

就是模板中的模板,一般用于繼承關(guān)系中,可以使用子類來構(gòu)造父類

9. specialization,模板特化

泛化的反義詞,在模板中,該模板針對某一特定類型具有與其他類型不一樣的實(shí)現(xiàn)時(shí),使用特化。

該模板中,針對char、int、long具有不同的實(shí)現(xiàn),所以對這三個(gè)類型分別寫了特化模板。

10. partial specialization,偏特化

分為兩種:

個(gè)數(shù)的偏:模板里面具有1個(gè)以上的泛化類型,只對其中的部分泛化類型進(jìn)行特化。

范圍的偏:比如對指針類具有不同的實(shí)現(xiàn),那么針對指針類型寫另一個(gè)泛化模板,這就是范圍的偏。

11. template template parameter,模板模板參數(shù)

這個(gè)不知道怎么講,自己不會(huì)很理解,感覺很少用,就放個(gè)圖自己體會(huì)吧。

注意:對于STL的容器,在使用時(shí)諸如vector,看似vector只需要一個(gè)參數(shù),實(shí)際上容器大多都有多個(gè)參數(shù),只是除了第一個(gè)參數(shù)之外都有默認(rèn)值。

12. variadic templates,數(shù)量不定的模板參數(shù)

自己可以寫個(gè)代碼實(shí)現(xiàn)一下圖中的內(nèi)容,寫一下就理解了。

13. auto

這個(gè)就不講了吧,C++基礎(chǔ)知識

14. ranged-base for,范圍for循環(huán)

這個(gè)也是,一般含有C++11的書里面都有提到,基礎(chǔ)知識。

15. reference

C++相比于C的一個(gè)比較大的新東西。

reference通常不用于聲明變量,而是用于函數(shù)參數(shù)類型和返回類型的描述。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容