15面向?qū)ο蟪绦蛟O(shè)計(jì)

15面向?qū)ο蟪绦蛟O(shè)計(jì)

三個基本概念:數(shù)據(jù)抽象、繼承和動態(tài)綁定。

15.1oop:概述

虛函數(shù)virtual:不繼承基類,基類有,希望派生類定義自身的版本。為了顯示表明派生類改寫了基類的虛函數(shù)在該函數(shù)的形參之后增加一個override。

派生列表:

動態(tài)綁定:根據(jù)實(shí)參選擇合適的函數(shù)版本(基類還是派生類的)進(jìn)行執(zhí)行,又稱運(yùn)行時綁定。

15.2定義基類和派生類

15.2.1定義基類

前者定義為虛函數(shù),

派生類的其他用戶是不能訪問受保護(hù)的,只能派生類自己能夠訪問。

15.2.2定義派生類

派生列表,表明從哪繼承,訪問說明符是什么。訪問說明符控制派生類從基類繼承而來的成員是否對派生類的用戶可見。

單繼承。

通過在形參后增加override來表明覆蓋基類的哪個虛函數(shù)。

派生類對象及派生類向基類的類型轉(zhuǎn)換

城派生類到基類的類型轉(zhuǎn)換。

派生類構(gòu)造函數(shù)

基類中有的成員使用基類的構(gòu)造函數(shù)初始化,派生類的自己初始化

被用作基類的類

必須依據(jù)定義而非僅聲明;

一個類可以是基類也可以是派生類。

防止繼承的發(fā)生final

在類名后加一個final。

15.2.3類型轉(zhuǎn)換與繼承

基類的指針或引用綁定到派生類對象上

靜態(tài)類型和動態(tài)類型

在對象之間不存在類型轉(zhuǎn)換

派生類向基類的自動類型轉(zhuǎn)換只對指針或引用類型有效,在派生類類型和基類類型之中不存在這樣的轉(zhuǎn)換。

15.3虛函數(shù)

使用基類的引用或指針調(diào)用一個虛成員函數(shù)時會執(zhí)行動態(tài)綁定,所有虛函數(shù)都必須定義。必須為每一個虛函數(shù)提供定義,而不管它是否被用到了,因?yàn)榫幾g器也無法確定到底會使用哪個虛函數(shù)。

對虛函數(shù)的調(diào)用可能在運(yùn)行是才被解析

派生類中虛函數(shù)

Virtual,一旦某個函數(shù)被聲明成虛函數(shù),則在所以的派生類中它都是虛函數(shù)。派生類中虛函數(shù)的形參必須與基類一致;返回類型也必須一致,例外情況:返回類型是類本身的指針或引用時。

Final和override

派生類定義了一個函數(shù)與基類虛函數(shù)名字相同但是形參列表不同,這是合法的,兩個函數(shù)是相互獨(dú)立的。

將某個函數(shù)指定為final(也可以用于函數(shù)),之后任何嘗試覆蓋該函數(shù)的操作都將引發(fā)錯誤。

回避虛函數(shù)機(jī)制

15.4抽象基類

純虛函數(shù)

在函數(shù)體的位置(聲明語句;之前)書寫=0,說明此函數(shù)沒有實(shí)際意義,無序定義。

其派生類可以創(chuàng)建對象。

派生類構(gòu)造函數(shù)只初始化它的直接基類。

disc_quot是抽象基類。

15.5訪問控制與繼承

友元與繼承

友元關(guān)系不能傳遞也不能繼承,派生類的友元也不能隨意訪問基類的成員;

改變個別成員的可訪問行

采用using聲明。

15.6繼承中的類作用域

在編譯時進(jìn)行名字查找

通過作用域運(yùn)算符來使用隱藏的成員

一如往常,名字查找優(yōu)先于類型檢查

隱藏了就不能用了

覆蓋重載的函數(shù)

如果派生類希望所有重載版本對他來說都是可見的,那么它就需要覆蓋所有的版本,或者一個也不覆蓋。

15.7構(gòu)造函數(shù)與拷貝控制

15.7.1虛析構(gòu)函數(shù)

我們通過在基類中將析構(gòu)函數(shù)定義成虛函數(shù)以確保執(zhí)行正確的析構(gòu)函數(shù)版本。

15.7.2合成拷貝控制與繼承

15.7.4繼承的構(gòu)造函數(shù)

繼承的構(gòu)造函數(shù)的特點(diǎn)

一個using聲明不會改變該構(gòu)造函數(shù)的訪問級別

大多數(shù)派生類會繼承所有基類的構(gòu)造函數(shù),兩個例外情況,(1)派生類可以繼承一部分構(gòu)造函數(shù),而為其他構(gòu)造函數(shù)定義自己的版本。(2)是默認(rèn)、拷貝和移動構(gòu)造函數(shù)不會被繼承。這些構(gòu)造函數(shù)按照正常規(guī)則被合成。

15.8容器與繼承

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

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

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