C++多態性主要體現在虛函數的調用,在C++中,虛函數的調用使用的是動態綁定,也有人說是晚捆綁,也就是在程序運行時才決定調用的函數,即使程序員不知道對象類型,程序仍然可以作出適合該對象類型的行為。
簡單的說,虛函數就是在函數原型前加上virtual關鍵字。函數一旦被聲明為虛函數,即使類在改寫它的時候沒有將其聲明為虛函數,它從該點的繼承層次結構中仍然是虛函數。如果基類中一個函數被聲明為虛函數,在若干子類中有著不同的實現,那麼我們在創建若干子類的不同對象時,可以用基類的指針或者引用來指明子類對象並且調用相應子類的函數。
虛函數的定義方式如下:
◆類的靜態成員函數不可以定義為虛函數;
◆類的構造函數不可以定義為虛函數;
◆非類的函數不可以定義為虛函數。
純虛函數是在聲明虛函數時初始化為0的函數。
- #include<memory>
- #include<iostream>
- using namespace std;
- Virtual void print() const = 0;
抽象類
簡單的說,帶有一個或多個未實現的純虛函數的類是抽象類。如果一個類繼承自一個抽象類,但它沒有全部實現父類裡面所有的純虛函數,那麼那些純虛函數在子類中仍然是純虛的,這個子類仍然是抽象類,仍然不能實例化對象。
抽象類是一種特殊的類,只能作為基類來使用,其純函數的實現由派生類給出。雖然不能實例化抽象類,但我們可以聲明一個抽象類的指針和引用,在實例化對象時,可以用不同的子類來實現,從而實現多態性操作。只有當派生類將基類中的所有的純虛函數都實現的時候,它才不再是抽象類。
C++多態性
從廣義上說,C++多態性是指一段程序能夠處理多種類型對象的能力。在C++語言中,多態性可以通過強制多態、重載多態、類型參數化多態、包含多態等多種實現形式。所謂多態就是通過類的繼承,使得同一個函數可以根據調用他的對象的類型作出不同的響應。它也繼承和重載共同構成面向對象的3大編程特性。
C++多態性通過虛函數來實現,當我們用基類的指針來調用虛函數時,程序會根據對象的屬性選擇其自身的函數實現。即使程序員不知道對象類型,程序仍然可以作出適合該對象類型的行為。
C++語言支持兩種類型的多態:一種是編譯時的多態靜態多態),另一種是運行時的多態動態多態)。在編譯時的多態是通過靜態聯編實現的,而在運行時的多態則是通過動態聯編實現的。