C++ 面向對象程序設計:(三)多態

多態是面向對象程序設計的核心思想。

其目的是用同樣的代碼,調用不同版本的函數,從而保證代碼的統一性和應用的靈活性。

爲了保證代碼的統一性,需要派生類的虛函數的形參必須與基類對應虛函數的形參完全一致;派生類中虛函數的返回類型與基類對應虛函數的返回類型匹配(a. 返回類型完全一致,或者b.返回類本身的指針或引用)

注意與函數重載思想的區別:雖然函數重載和多態中都要求函數名相同,但是,函數重載是要求形參不同,通過形參數量或類型的差異調用不同版本,因此,代碼中調用表達式是不同的;然而,多態中要求虛函數的形參一致,通過調用函數的指針或引用動態綁定的對象不同選擇不同版本的函數。

多態基本原理:

1、派生類引用/指針到基類引用/指針的類型可轉換性:由於派生類對象都包含基類的部分,因此,可以將基類的引用或指針綁定到派生類對象的基類部分上

2、基類的指針或引用的靜態類型(是變量聲明的類型,編譯時即可確定)與動態類型(內存中對象的類型,運行時才能確定)可能不一致。

3、在使用基類的引用或指針調用一個虛函數時發生動態綁定,被調動的函數的版本時綁定的指針或引用的對象的動態類型相匹配的那個。

 

使用方法:

1、基類中添加virtual關鍵字:把類中需要動態綁定的函數加上virtual關鍵字,聲明爲虛函數。(PS:中文把virtual翻譯成“虛”,漢語中對“虛”理解一般是“假的”意思,用這種釋義理解虛函數總是沒法把握虛函數的要領,甚至沒法接受“虛函數”的概念,我覺得不妨把“虛”理解成“不定的”、“不確定的”,即動態綁定,這樣提到虛函數時馬上就明白了它的用途。

2、繼承類中建議把覆蓋的虛函數後添加override關鍵字,提示編譯器檢測是否按照編程者的本意成功完成覆蓋基類中的虛函數。

發佈了48 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章