太極1:繼承和多型2

The Eighth發表於2020-12-25

1.概念:同一個方法,在不同的場景下,可以表現出不同的行為。

2.分類:靜態多型、動態多型

靜態多型(靜態繫結、靜態聯編、早繫結):在編譯期間,就可以確定函式的行為,即:具體呼叫那個函式,體現:函式過載、模板;

動態多型(動態繫結、動態聯編、晚繫結):在程式執行時,根據基類的指標或者引用指向不同類的物件,呼叫對應的虛擬函式—在程式執行時,確定函式具體的行為。

3.動態多型實現條件—(前提:繼承體系下)
a.基類中必須要有虛擬函式,子類必須要對基類中的虛擬函式進行重寫
b.虛擬函式呼叫:必須通過基類的指標或者引用來呼叫虛擬函式
兩個條件缺一不可,否則無法實現多型

體現:如果兩個條件已經完全滿足,在程式執行時,根據基類的指標或者引用指向不同類的物件選擇對應類的虛擬函式進行呼叫

4.重寫:
a.一定是子類對基類的函式進行重寫,而且該函式一定要是虛擬函式
b.子類和基類虛擬函式的原型必須要一致:返回值型別、函式名、引數列表必須均一致
例外:
協變:基類虛擬函式返回基類的指標或者引用
子類虛擬函式返回子類的指標或者引用
基類/子類和基類/子類可以是不同的繼承體系
返回型別不同
解構函式:如果基類中的解構函式是虛擬函式,只要子類的解構函式給出,則必然構成重寫,因為函式名不同。
----------------------------------分界線--------------------------------------
C++11:override和final
override:只能修飾子虛擬函式,而且定義時子類的虛擬函式
作用:

相關文章