C++ 虛函數(shù)與純虛函數(shù)代碼詳解
什么是虛函數(shù):
虛函數(shù) 是在基類中使用關(guān)鍵字 virtual 聲明的函數(shù),在C++ 語言中虛函數(shù)可以繼承,當(dāng)一個成員函數(shù)被聲明為虛函數(shù)之后,其派生類中的同名函數(shù)都自動生成為虛函數(shù),
虛函數(shù)主要體驗C++的多態(tài)方面,(多態(tài)是參數(shù)個數(shù)和類型相同而實現(xiàn)功能不同的函數(shù))
為了更好的里面虛函數(shù)請看下面的demo
#include <iostream> #include <string> using namespace std; class Aname { public: virtual void function_name() { cout << "Aname調(diào)用了function_name" << endl; } }; class Bname:public Aname { public: void function_name() { cout << "Bname調(diào)用了function_name" << endl; } }; int main() { Aname *a = new Bname(); a->function_name(); }
這里由于類Aname 里面的function_name 被聲明為虛函數(shù), 所以雖然指針a 指向Aname 卻調(diào)用了
Bname 里面的function_name
打印結(jié)果為
如果類Aname 里面的函數(shù)沒有聲明虛函數(shù), 是調(diào)用A里面的函數(shù)的,
虛函數(shù)的注意事項:
1 只有類的成員函數(shù)才能為虛函數(shù)
2 靜態(tài)成員函數(shù)不能為虛函數(shù),內(nèi)聯(lián)函數(shù)和構(gòu)造函數(shù)不能為虛函數(shù)
存虛函數(shù)
是指被表明為不被具體實現(xiàn)的虛成員函數(shù),它不具備函數(shù)的功能,它在基類中沒有定義,但要求任何派生類都要定義自己的實現(xiàn)方法。在基類中實現(xiàn)純虛函數(shù)的方法是在函數(shù)原型后加"=0"
例如:
virtual void funtion1()=0
demo 認(rèn)識下存虛函數(shù)
#include <iostream> #include <string> using namespace std; class Aname { public: virtual void function_name() = 0; }; class Bname : public Aname { public: void function_name() { cout << "Bname調(diào)用了function_name" << endl; } }; int main() { Aname *a = new Bname(); a->function_name(); }
存虛函數(shù)的注意事項:
1 存虛函數(shù)不能被實例化
2 virtual void function_name() = 0; 中 viertual 不能去掉,否則會報錯
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Mybatis高級映射、動態(tài)SQL及獲得自增主鍵的解析
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis。這篇文章主要介紹了Mybatis高級映射、動態(tài)SQL及獲得自增主鍵的相關(guān)資料,需要的朋友可以參考下2016-11-11JAXB命名空間及前綴_動力節(jié)點Java學(xué)院整理
這篇文章主要給大家介紹了關(guān)于JAXB命名空間及前綴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08SpringSecurity實現(xiàn)權(quán)限認(rèn)證與授權(quán)的使用示例
本文主要介紹了SpringSecurity實現(xiàn)權(quán)限認(rèn)證與授權(quán)的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11關(guān)于Java?中?Future?的?get?方法超時問題
這篇文章主要介紹了Java?中?Future?的?get?方法超時,最常見的理解就是,“超時以后,當(dāng)前線程繼續(xù)執(zhí)行,線程池里的對應(yīng)線程中斷”,真的是這樣嗎?本文給大家詳細(xì)介紹,需要的朋友參考下吧2022-06-06Springboot使用Maven占位符@替換不生效問題及解決
這篇文章主要介紹了Springboot使用Maven占位符@替換不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04