Boolan C++面向?qū)ο蟾呒?jí)編程(下)第二周

第二周

一、對(duì)象模型:關(guān)于vptr和vtbl

虛指針和虛表

1.虛函數(shù)

類有虛函數(shù),對(duì)象里面會(huì)多一個(gè)指針:虛指針。

B繼承了A,如果A有虛函數(shù),B一定也有虛函數(shù)。因?yàn)椋珺繼承了A的數(shù)據(jù)(內(nèi)存),也繼承了A的函數(shù)(函數(shù)的調(diào)用權(quán))。

重寫父類的虛函數(shù)時(shí),也要加virtual?

不加virtual,相當(dāng)于子類自己的一個(gè)新函數(shù)(不是虛函數(shù))?

2.虛表

虛表,存放函數(shù)指針。

虛表中函數(shù)的位置,按照類中函數(shù)的順序。

3.動(dòng)態(tài)綁定

C語(yǔ)言調(diào)用函數(shù),靜態(tài)綁定。Call …

虛函數(shù),不做靜態(tài)綁定,做動(dòng)態(tài)綁定。

C++什么時(shí)候做動(dòng)態(tài)綁定:

通過(guò)指針調(diào)用。

向上轉(zhuǎn)型。

第三,調(diào)用的是虛函數(shù)。

4.多態(tài)

指針有很多的類型

二、對(duì)象模型:關(guān)于this

侯捷老師總結(jié):虛函數(shù)使用一種用在多態(tài),一種用在模板方法。

C++中所有的成員函數(shù)都有一個(gè)隱藏的this pointer。

編譯器把myDoc.OnFileOpen()看做CDocument::OnFileOpen(&myDoc)。

復(fù)合動(dòng)態(tài)綁定的三個(gè)條件。

三、對(duì)象模型:關(guān)于Dynamic Binding

四、談?wù)刢onst

1.常量成員函數(shù)

??? basic_string就是標(biāo)準(zhǔn)庫(kù)中的字符串,string是它的別名,使用reference count設(shè)計(jì)出來(lái)的,可以共享

函數(shù)重載不看return type

const算函數(shù)簽名的一部分

字符串的[]有可能改變字符串的內(nèi)容,所以非const的[]必須考慮COW:Copy On Write。

五、關(guān)于New和Delete

??? 參見第一部分。

new和delete都是表達(dá)式,分解進(jìn)入的是operator new和operator delete。表達(dá)式不能重載,opetator可以重載。

六、重載operator new和operator delete

1.重載全局operator new/delete

2.重載member operator new/delete

3.重載member operator new[]/delete[]

七、示例

1.強(qiáng)制調(diào)用全局operator new/delete

::new

2.new[]/delete[]

構(gòu)造的時(shí)候是從上往下,析構(gòu)的時(shí)候是從下往上。

分配內(nèi)存的大小是數(shù)組的大小加counter的大小。

八、重載 new()/delete()

九、Basic_string使用new(extra)擴(kuò)充申請(qǐng)量

1.new有多少種

new表達(dá)式

operator new

array new

placement new

2.標(biāo)準(zhǔn)庫(kù)中字符串的placement new

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

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

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