Boolan網(wǎng)——C++微專業(yè)第五周學(xué)習(xí)筆記

(1)虛指針與虛表

通過對上圖左側(cè)三個(gè)內(nèi)存數(shù)據(jù)塊的分析可以看出:子類對象繼承了父類的成員數(shù)據(jù)。并且父類有虛函數(shù),子類一定有虛函數(shù)。不僅數(shù)據(jù)會被繼承,函數(shù)也會被繼承。但是應(yīng)當(dāng)注意的是此時(shí)子類繼承的是函數(shù)的調(diào)用權(quán),而不是調(diào)用函數(shù)的空間。

當(dāng)類中存在虛函數(shù),此時(shí)就存在動態(tài)綁定機(jī)制。在動態(tài)綁定中,借助于虛指針vptr與虛表vtbl完成函數(shù)的查找。首先找到vptr,然后找到vtbl,進(jìn)而找到相對應(yīng)的函數(shù)。動態(tài)綁定也被稱之為虛機(jī)制。

動態(tài)綁定(虛機(jī)制)的三個(gè)條件:

<1>通過指針調(diào)用;

<2>指針是向上轉(zhuǎn)型;

<3>調(diào)用的是虛函數(shù)。

(2)this指針

利用對象調(diào)用,對象的地址就是this pointer。所有的成員函數(shù)都有一個(gè)隱藏的this pointer。在上圖中重點(diǎn)應(yīng)當(dāng)理解灰色調(diào)用線路。

(3)動態(tài)綁定與靜態(tài)綁定

B ? ?b;

A ? a = ?(A)b; ? ? ?// B類繼承與A類

a.vfun1();

在上述代碼中,a.vfun1();并解析為匯編語言為call XXXX的形式屬于靜態(tài)綁定。

A* ? ?pa = new B;

pa->vfunc1();

pa = &b;

pa->vfunc1();

上述代碼中函數(shù)調(diào)用屬于動態(tài)綁定。動態(tài)綁定(虛機(jī)制)的三個(gè)條件:<1>通過指針調(diào)用;<2>指針是向上轉(zhuǎn)型;<3>調(diào)用的是虛函數(shù)。

(4)const

對const,應(yīng)當(dāng)注意:當(dāng)成員函數(shù)的const和non-const版本同時(shí)存在時(shí),const object只會(只能)調(diào)用const版本,而non-const object只會(只能)調(diào)用non-const版本。

(5)new與delete

對于new與delete,此處給出了本周的編程作業(yè):

最后編輯于
?著作權(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)容