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