第二周
一、對(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