太極1:繼承和多型2
1.概念:同一個方法,在不同的場景下,可以表現出不同的行為。
2.分類:靜態多型、動態多型
靜態多型(靜態繫結、靜態聯編、早繫結):在編譯期間,就可以確定函式的行為,即:具體呼叫那個函式,體現:函式過載、模板;
動態多型(動態繫結、動態聯編、晚繫結):在程式執行時,根據基類的指標或者引用指向不同類的物件,呼叫對應的虛擬函式—在程式執行時,確定函式具體的行為。
3.動態多型實現條件—(前提:繼承體系下)
a.基類中必須要有虛擬函式,子類必須要對基類中的虛擬函式進行重寫
b.虛擬函式呼叫:必須通過基類的指標或者引用來呼叫虛擬函式
兩個條件缺一不可,否則無法實現多型
體現:如果兩個條件已經完全滿足,在程式執行時,根據基類的指標或者引用指向不同類的物件選擇對應類的虛擬函式進行呼叫
4.重寫:
a.一定是子類對基類的函式進行重寫,而且該函式一定要是虛擬函式
b.子類和基類虛擬函式的原型必須要一致:返回值型別、函式名、引數列表必須均一致
例外:
協變:基類虛擬函式返回基類的指標或者引用
子類虛擬函式返回子類的指標或者引用
基類/子類和基類/子類可以是不同的繼承體系
返回型別不同
解構函式:如果基類中的解構函式是虛擬函式,只要子類的解構函式給出,則必然構成重寫,因為函式名不同。
----------------------------------分界線--------------------------------------
C++11:override和final
override:只能修飾子虛擬函式,而且定義時子類的虛擬函式
作用:
相關文章
- 繼承和多型繼承多型
- 多型和繼承多型繼承
- python極簡教程07:封裝、多型和繼承Python封裝多型繼承
- Python 繼承 和 多型Python繼承多型
- OOP的多型和繼承OOP多型繼承
- 封裝、繼承和多型封裝繼承多型
- C中的繼承和多型繼承多型
- 實驗五 繼承和多型繼承多型
- 面向2-封裝、繼承、多型封裝繼承多型
- 繼承與多型繼承多型
- Python中的繼承和多型Python繼承多型
- [c++] 繼承和多型整理二C++繼承多型
- java繼承與多型Java繼承多型
- 繼承+多型+抽象類繼承多型抽象
- C#中繼承和多型的研究C#中繼繼承多型
- 【Java學習筆記】繼承和多型Java筆記繼承多型
- JavaScript 的繼承與多型JavaScript繼承多型
- TypeScript(5)類、繼承、多型TypeScript繼承多型
- Javascript的繼承與多型JavaScript繼承多型
- 物件導向基礎(1)--繼承 多型 重構物件繼承多型
- go語言中的封裝,繼承和多型Go封裝繼承多型
- 淺析 Python 的類、繼承和多型Python繼承多型
- 繼承與派生,多繼承,函式過載,建構函式呼叫順序 靜態多型和動態多型繼承函式多型
- Java 繼承與多型實驗Java繼承多型
- c++學習(1)--C++封裝、繼承、多型C++封裝繼承多型
- 多繼承 與 多重繼承繼承
- 多繼承繼承
- C語言實現繼承多型C語言繼承多型
- Java中的類繼承與多型Java繼承多型
- 重讀C++之一:封裝、繼承和多型C++封裝繼承多型
- Java基礎之淺談繼承、多型Java繼承多型
- C++ 繼承、多型、虛擬函式C++繼承多型函式
- aardio 實現封裝繼承多型封裝繼承多型
- 這樣理解,java繼承中多型的屬性和方法Java繼承多型
- 在繼承和多型中的記憶體分配機制繼承多型記憶體
- java 繼承多型的一些理解和不理解Java繼承多型
- Javascript繼承2:建立即繼承—-建構函式繼承JavaScript繼承函式
- Go語言封裝、繼承、介面、多型和斷言的案例Go封裝繼承多型