C++中什么是虛函數(shù)
虛函數(shù)是指:在某基類中聲明為virtual并在一個或多個派生類中被重新定義的成員函數(shù),即被virtual關(guān)鍵字修飾的成員函數(shù);格式為“virtual 函數(shù)返回類型 函數(shù)名(參數(shù)表) {函數(shù)體}”。
在某基類中聲明為 virtual 并在一個或多個派生類中被重新定義的成員函數(shù),用法格式為:;實現(xiàn)多態(tài)性,通過指向派生類的基類指針或引用,訪問派生類中同名覆蓋成員函數(shù)。
簡單地說,那些被virtual關(guān)鍵字修飾的成員函數(shù),就是虛函數(shù)。
首先:強調(diào)一個概念定義一個函數(shù)為虛函數(shù),不代表函數(shù)為不被實現(xiàn)的函數(shù)。定義它為虛函數(shù)是為了允許用基類的指針來調(diào)用子類的這個函數(shù)。定義一個函數(shù)為純虛函數(shù),才代表函數(shù)沒有被實現(xiàn)。定義純虛函數(shù)是為了實現(xiàn)一個接口,起到一個規(guī)范的作用,規(guī)范繼承這個類的程序員必須實現(xiàn)這個函數(shù)。
class Animal
{
public:
//Speak函數(shù)就是虛函數(shù)
//函數(shù)前面加上virtual關(guān)鍵字,變成虛函數(shù),那么編譯器在編譯的時候就不能確定函數(shù)調(diào)用了。
virtual void speak()
{
cout << "動物在說話" << endl;
}
};
class Cat :public Animal
{
public:
void speak()
{
cout << "小貓在說話" << endl;
}
};
int main() {
Animal* a = new Cat(); //
a->speak();//小貓在說話
Animal b = Cat();
b.speak();//動物在說話,不明白這里為什么沒有發(fā)生多態(tài)
system("pause");
return 0;
}
這個例子是虛函數(shù)的一個典型應(yīng)用,通過這個例子,也許你就對虛函數(shù)有了一些概念。它虛就虛在所謂“推遲聯(lián)編”或者“動態(tài)聯(lián)編”上,一個類函數(shù)的調(diào)用并不是在編譯時刻被確定的,而是在運行時刻被確定的。由于編寫代碼的時候并不能確定被調(diào)用的是基類的函數(shù)還是哪個派生類的函數(shù),所以被成為“虛”函數(shù)。 虛函數(shù)只能借助于指針或者引用來達到多態(tài)的效果。
到此這篇關(guān)于什么是虛函數(shù)的文章就介紹到這了,更多相關(guān)什么是虛函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)的個數(shù)
本文詳細講解了C語言實現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)個數(shù)的方法,文中通過示例代碼介紹的非常詳細。需要的朋友可以收藏下,方便下次瀏覽觀看2021-11-11
c++之time_t和struct tm及時間戳的正確使用方式
C++中處理時間的常用數(shù)據(jù)類型有time_t和struct tm,time_t通常用來表示時間戳,即從1970年1月1日至今的秒數(shù),struct tm是一個結(jié)構(gòu)體,用來存儲年、月、日、時、分、秒等信息,時間戳可以通過gmtime()轉(zhuǎn)換為struct tm類型,反之亦然2024-10-10
深入了解C++ 結(jié)構(gòu)體(struct)與共用體(union)
這篇文章主要介紹了C++ 結(jié)構(gòu)體與共用體的的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下2020-08-08
vc6.0中c語言控制臺程序中的定時技術(shù)(定時器)
這篇文章主要介紹了vc6.0中c語言控制臺程序中的定時技術(shù)(定時器),需要的朋友可以參考下2014-04-04
C++實現(xiàn)學(xué)生檔案管理系統(tǒng)
這篇文章主要為大家詳細介紹了C++實現(xiàn)學(xué)生檔案管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

