(Boolan) 面向對象高級編程(下)第五周筆記

對象模型

vptr虛函數(shù)指針

若類對象中含有虛函數(shù),則在對象模型中會存在一根虛函數(shù)指針

vtbl虛函數(shù)表

虛函數(shù)指針指向一塊內存,稱為虛表

虛表的內容是一段地址,指向該類對象在實現(xiàn)多態(tài)過程中虛函數(shù)實際綁定的函數(shù)

this

模板方法

通過this指針調用虛函數(shù)指針指向虛表中實際對應的虛函數(shù)

動態(tài)綁定

動態(tài)綁定的實現(xiàn)需要滿足三個條件

1.使用指針調用

2.存在向上轉型

3.調用的是虛函數(shù)

const漫談

const對象可以調用const成員函數(shù)

const對象不可以調用non-const成員函數(shù)

non-const對象可以調用const成員函數(shù)

non-const對象可以調用non-const成員函數(shù)

const String str("hello world");

str.print();

如果當初設計String::print()時未指明const,那么上行便是經(jīng)由const對象調用non-const成員函數(shù),會出錯,絕非我們想要看到的結果。

當成員函數(shù)的const和non-const版本同時存在時:

const對象只會調用const版本

non-const對象只會調用non-const版本

new和delete

全局的new/delete

如果重載全局

::operator new(), ::operator new[]new()
::operator delete(), ::operator delete[]()

將影響整個項目

對于已經(jīng)有重載作為類成員的new/delete

使用::new ::new[] ... 即可強制使用全局版本的函數(shù)

作為類成員的new/delete

對于類成員 如果沒有定義成員new/delete

則會調用全局的new/delete

對于已經(jīng)定義了成員new/delete的類

可以使用::前綴強制調用全局new/delete

placement new()

basic_string使用的new(extra)擴充申請量

template<class chatT, class traits, class Allocator>
inline void* basic_string<charT, traits, Allocator>::Rep::operator new(size_t s, size_t extra)
{
        return Allocator::allocate(s + extra * sizeof(charT));
}

著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容