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