1.概念:同乙個方法,在不同的場景下,可以表現出不同的行為。
2.分類:靜態多型、動態多型
靜態多型(靜態繫結、靜態聯編、早繫結):在編譯期間,就可以確定函式的行為,即:具體呼叫那個函式,體現:函式過載、模板;
動態多型(動態繫結、動態聯編、晚繫結):在程式執行時,根據基類的指標或者引用指向不同類的物件,呼叫對應的虛函式—在程式執行時,確定函式具體的行為。
3.動態多型實現條件—(前提:繼承體系下)
a.基類中必須要有虛函式,子類必須要對基類中的虛函式進行重寫
b.虛函式呼叫:必須通過基類的指標或者引用來呼叫虛函式
兩個條件缺一不可,否則無法實現多型
體現:如果兩個條件已經完全滿足,在程式執行時,根據基類的指標或者引用指向不同類的物件選擇對應類的虛函式進行呼叫
4.重寫:
a.一定是子類對基類的函式進行重寫,而且該函式一定要是虛函式
b.子類和基類虛函式的原型必須要一致:返回值型別、函式名、引數列表必須均一致
例外:協變:基類虛函式返回基類的指標或者引用
子類虛函式返回子類的指標或者引用
基類/子類和基類/子類可以是不同的繼承體系
返回型別不同
析構函式:如果基類中的析構函式是虛函式,只要子類的析構函式給出,則必然構成重寫,因為函式名不同。
----------------------------------分界線--------------------------------------
c++11:override和final
override:只能修飾子虛函式,而且定義時子類的虛函式
作用:
C 繼承和多型1
1.繼承 本質 復用 includeusing namespace std class a private int ma class b public a private int mb 2.繼承關係class b public a 繼承類 繼承方式 public private protect 被繼...
C 繼承和多型 2
繼承 單繼承多繼承 菱形繼承 存在的問題 間接基類的資料會出現多份,會導致訪問出錯。解決方法 虛表指標 虛繼承虛基類構造優先順序高 非虛基類布局優先於虛基類 includeclass animal 抽象類 virtual void shark 0 純虛函式 virtual animal privat...
繼承和多型
物件導向程式設計時有乙個非常重要的原則 write once only once 編寫一次,且僅編寫一次 如果沒有繼承這種機制我們可能要重複寫很多 下面來看一下繼承 一 繼承 1 子類如果繼承父類必須使用extends這個關鍵字 2 子類呼叫父類的構造方法使用super關鍵字,也可以通過super來...