1)編譯時多態性:同一對象在收到相同的消息卻產生不同的函數調用,一般通過函數重載來實現,在編譯時就實現了綁定,屬于靜態綁定。
2)運行時多態性:不同對象在收到相同消息時產生不同的動作,一般通過虛函數來實現。
二、多態和非多態的實質區別
函數地址為動態綁定還是靜態綁定。
三、多態的作用
1)對于封裝,可以使代碼模塊化。
2)對于繼承,可以擴展已經存在的代碼。
3)而多態,是為了接口重用。
四、多態常見的用法
常見的用法就是聲明基類的指針,利用該指針指向任意一個子類對象,調用相應的虛函數,可以根據指向的子類的不同而實現不同的方法。如果沒有使用虛函數的話,即沒有利用C++多態性,則利用基類指針調用相應的函數的時候,將總被限制在基類函數本身,而無法調用到子類中被重寫過的函數。因為沒有多態性,函數調用的地址將是一定的,而固定的地址將始終調用到同一個函數,這就無法實現一個接口,多種方法的目的了。
五、擴展了解隱藏規則
本來僅僅區別重載與覆蓋并不算困難,但是C++的隱藏規則使問題復雜性陡然增加。
這里“隱藏”是指派生類的函數屏蔽了與其同名的基類函數,規則如下:
1)如果派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏。(注意別和重載混淆)
2)如果派生類的函數與基類的函數相同,但是基類沒有virtual關鍵字,那么基類的函數將被隱藏。(注意別和覆蓋混淆)。
想要了解更多C++應用技術的可以加入我們噢!