多態性,在c++中指具有不同功能的函數可以用同一個函數名,即可以用同一個函數名調用不同內容的函數。向不同的對象發送用一個消息,不同的對象在接收同樣的消息,會產生不同的行為(方法)。
從系統實現角度來看。多態性分為兩類:靜態多態性和動態多態性。
靜態多態性:在程序編譯時系統就能決定調用哪個函數,因此靜態函數有稱編譯時的多態性(實質上是通過函數的重載實現)。例如:函數的重載和運算符重載實現.
動態多態性:運行過程中才動態地確定操作指針所指的對象。主要通過虛函數和重寫來實現。
從系統實現角度來看。多態性分為兩類:靜態多態性和動態多態性。
靜態多態性:在程序編譯時系統就能決定調用哪個函數,因此靜態函數有稱編譯時的多態性(實質上是通過函數的重載實現)。例如:函數的重載和運算符重載實現.
動態多態性:運行過程中才動態地確定操作指針所指的對象。主要通過虛函數和重寫來實現。
早兩天知道,就不會和學生講不清楚了。
應該是"不同的對象在接收相同的消息"
應該是"向不同的對象發送同一個消息"吧
我理解靜Subtyping polymorphism 即動態多態性是指的虛函數,即用override virtual function的方法,名字和參數都相同,但繼承類不同。運行時根據指針類型決定調用函數。override應該翻譯成重寫或者覆蓋
而Parametric polymorphism所謂靜態多態性則指的generic或者template,這是在編譯時根據參數類型而綁定的。
而operator overload則是函數名相同,參數不同,這跟多態性一點關系沒有,只是方便人類閱讀記憶,對程序沒區別,編譯時會自動改名為不同名字的函數。
可悲的是這08年的錯誤文章竟然在google搜索“多態性”時名列第二,不知道有多少人都誤解了