您好,登錄后才能下訂單哦!
本篇內容主要講解“C++基礎多態有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++基礎多態有哪些”吧!
C++按照實現的時機分為編譯時多態和運行時多態
1.編譯時多態也成為靜態連編,是指程序在編譯的時候就確定了多態性,通過重載機制實現
2運行時多態又稱為動態聯編,是指必須在運行中才能確定的多態性,通過繼承和虛函數實現
##虛函數
若派生類中定義了于基類相同的函數,使用基類指針指向派生類對象時,通過指針調用的是基類函數而不是派生類中的函數。
class Animal{public: void speak() { cout<<"animal speak"<<endl; }};class Dog:public Animal{public: void speak(){ cout<<"dog speak"<<endl; }};int main() { Dog dog; Animal *animal = &dog; animal->speak(); return 0;}
?? animal->speak()會調用的是基類的speak函數,而不會調用Dog類的派生同名函數。編譯器的做法不是我們期望的,根據實際的對象類型來判斷重寫函數的調用,如果父類指針指向的是父類對象則調用父類中定義的函數,如果父類指針指向的是子類對象則調用子類中定義的重寫函數。
??那些被virtual關鍵字修飾的成員函數就是虛函數。虛函數的作用,用專業術語來解釋就是實現多態性(Polymorphism),多態性是將接口與實現進行分離;用形象的語言來解釋就是實現以共同的方法,但因個體差異而采用不同的策略。同樣的調用語句有多種不同的表現形態。
虛函數聲明如下:
C++中通過virtual關鍵字對多態進行支持
使用virtual聲明的函數被重寫后即可展現多態特性
virtual ReturnType FunctionName(Parameter);
虛函數必須實現,如果不實現,編譯器將報錯,錯誤提示為
error LNK****: unresolved external symbol "public: virtual void __thiscallClassName::virtualFunctionName(void)"
##純虛函數
??在很多情況下, 基類本身生成對象是不合情理的。例如,動物作為一個基類可以派生出老虎、孔雀等子類,但動物本身生成對象明顯不合常理。為了解決這個問題,方便使用類的多態性,引入了純虛函數的概念。 純虛函數是在基類中聲明的虛函數,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函數的方法是在函數原型后加“=0”
純虛函數聲明如下:
??一個包含純虛擬函數的類稱為抽象類。 抽象類是不能定義對象的。同時抽象類只能作為基類來使用,其純虛函數的實現由派生類給出。如果派生類中沒有重新定義純虛函數,而只是繼承基類的純虛函數,則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數的實現,則該派生類就不再是抽象類了,它是一個可以建立對象的具體的類。
到此,相信大家對“C++基礎多態有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。