C++面向?qū)ο蟾呒?jí)編程(下)
第一周結(jié)構(gòu)框圖:
1.導(dǎo)讀
2.Conversion function
3.non-explicit-one-argument ctor
4.point-link classes
5.function-like classes
6.namespace 經(jīng)驗(yàn)談
7.class template 類模板
8.function template 函數(shù)模板
9.member template 成員模板
10.specialization 模板特化
11.模板偏特化
12.模板模板參數(shù)
13.關(guān)于C++標(biāo)準(zhǔn)庫
14.三個(gè)主題
15.Reference
1.導(dǎo)讀
這部分侯捷老師主要介紹了幾本C++好書(如C++ Prime)
關(guān)鍵是:勿在浮沙筑高臺(tái)
2.Conversion function:
轉(zhuǎn)化函數(shù)
這里寫圖片描述
1.此例中轉(zhuǎn)換函數(shù)允許將Fraction對(duì)象轉(zhuǎn)化為double型
2.return類型不用寫,返回類型即為函數(shù)名
3.任何一個(gè)class,只要認(rèn)為合理国裳,可寫多個(gè)轉(zhuǎn)換函數(shù)
3.non-explicit-one-argument ctor
這里寫圖片描述
1.one argument意思是嚎于,只要一個(gè)實(shí)參就夠了
2.將4轉(zhuǎn)為Fraction(4,1)時(shí)用到ctor
conversion function vs. non-explicit-one-argument ctor:
這里寫圖片描述
1.如果兩個(gè)并存涩笤,可能有問題
2.d2=f+4多余一條路可走溯捆,編譯器不知該走哪條路
3.是否引起歧義取決于設(shè)計(jì)者的操作
explicit-one-argument ctor:
這里寫圖片描述
1.explicit-明確的—告訴編譯器不要自動(dòng)轉(zhuǎn)化
2.這個(gè)explicit關(guān)鍵字大都就用在構(gòu)造函數(shù)前
3.因有explicit d4=f+4 不會(huì)自動(dòng)變?yōu)?/1,導(dǎo)致加法動(dòng)作失敗
conversion function:
STL中用到轉(zhuǎn)換函數(shù)例:
這里寫圖片描述
1.bool為模板的偏色化
2.第7行代碼傳回的是另一個(gè)class
4.point-link classes:
這里寫圖片描述
1.一個(gè)class做出來生成的一個(gè)對(duì)象像一個(gè)指針
2.一般智能指針都有左邊的ctor蜘矢,來接收天然的C++的指針
3.箭頭符號(hào)特別悼枢,作用完后會(huì)自動(dòng)再添加一個(gè)箭頭
5.function-like classes
這里寫圖片描述
6.namespace經(jīng)驗(yàn)談
這里寫圖片描述
7.class template 類模板
這里寫圖片描述
類模板在使用時(shí)需要指明其類型
8.function template 函數(shù)模板
這里寫圖片描述
編譯器會(huì)對(duì)function template進(jìn)行實(shí)參推導(dǎo)
9.member template 成員模板
這里寫圖片描述
具體:
這里寫圖片描述
比如普通指針ptr指向動(dòng)物埠忘,則ptr可以指向老虎,因?yàn)槔匣⑹莿?dòng)物馒索。
普通指針可以莹妒,智能指針也可以。
10.specialization 模板特化:
泛化:模板說用的時(shí)候指定
特化:意為作為一個(gè)設(shè)計(jì)者绰上,可能會(huì)面對(duì)某些獨(dú)特的類型
這里寫圖片描述
11.模板偏特化:
1.偏即為局部的意思
2.偏分兩種:個(gè)數(shù)的偏旨怠、范圍的偏
個(gè)數(shù)的偏:
這里寫圖片描述
1.從上面的兩個(gè)模板參數(shù)變?yōu)橄旅娴囊粋€(gè)模板參數(shù)
2.綁定要從左到右,不能跳躍綁定渔期,比如不能綁定1运吓、3、5項(xiàng)疯趟。
范圍的偏:
這里寫圖片描述
1.范圍的意:之前是任意范圍,現(xiàn)在變?yōu)橹羔?2.不是指針用上面版谋梭,是執(zhí)政用下面的版本
12.模板模板參數(shù)
這里寫圖片描述
1.第二項(xiàng)既是模板信峻,又是模板參數(shù)。
2.下面直接用會(huì)出現(xiàn)錯(cuò)誤瓮床,需要加上中間的兩行盹舞。
3.侯老師說中間兩行太復(fù)雜,C++2.0中會(huì)講隘庄。
下面的不是模板模板函數(shù):
這里寫圖片描述
13.關(guān)于C++標(biāo)準(zhǔn)庫
這里寫圖片描述
1.應(yīng)該測試標(biāo)準(zhǔn)庫里面的每個(gè)函數(shù)踢步,知道其能解決什么問題
2.具體后續(xù)章節(jié)會(huì)仔細(xì)講
14.三個(gè)主題
14-1 variadic templates:
這里寫圖片描述
14-2 auto:
這里寫圖片描述
注意不能所有的變量都用auto
14-3 ranged-base for
這里寫圖片描述
傳值不會(huì)影響原來的東西
傳引用會(huì)影響原來的東西
15.Reference
這里寫圖片描述
編譯器會(huì)制造假象使兩sizeof同,時(shí)兩者地址同
reference的常見用途:
這里寫圖片描述
注:析構(gòu)函數(shù)設(shè)置為虛函數(shù)并不影響sizeof結(jié)果丑掺,只是在vtbl里面多增加一項(xiàng)
重點(diǎn):
當(dāng)類里面存在虛函數(shù)時(shí)获印,這個(gè)類所占的內(nèi)存就會(huì)比沒有虛函數(shù)時(shí)候大一點(diǎn),大的位置是在類的成員變量前面會(huì)多出一個(gè)指針(vptr)街州,它指向虛指針表(vtbl)兼丰,虛指針表里面的每一個(gè)指針再指向?qū)?yīng)的虛函數(shù),從而實(shí)現(xiàn)動(dòng)態(tài)綁定
此點(diǎn)在作業(yè)中有所體現(xiàn)K艚伞w⒄鳌!