一、多態介紹
面向對象的核心思想是多態性,其含義是“多種形式”
概念:在子類覆蓋了父類函數的情況下,用父類的指針(或引用)調用子類對象,或者通過父類指針調用覆蓋函數的時候(動態綁定),實際上調用的是子類的覆蓋版本,這種現象叫做多態
注意事項:
只有用父類的指針(或引用)調用子類對象多態才會產生,非指針/引用不會產生多態
且只有用父類的指針(或引用)調用虛函數才會產生多態,調用非虛函數不會產生多態效果
運行時解析:
當我們使用基類的引用或指針調用基類中定義的一個虛函數時,我們并不知道該函數真正作用的對象是什么類型,因為它可能是一個基類的對象也可能是一個派生類的對象
如果該函數是虛函數,則直到運行時才會決定到底執行哪個版本。非虛函數的調用在編譯時進行綁定的,類似的,通過對象進行的函數(虛函數或非虛函數)調用也在編譯時綁定
二、多態的條件
父子類之間有覆蓋關系
基類必須通過引用或指針指向子類,然后再調用虛函數,此時就可以實現多態
三、演示案例
class A{public://虛函數virtual void show()const { cout &