C++中什么是虛函數(shù)
虛函數(shù)是指:在某基類中聲明為virtual并在一個(gè)或多個(gè)派生類中被重新定義的成員函數(shù),即被virtual關(guān)鍵字修飾的成員函數(shù);格式為“virtual 函數(shù)返回類型 函數(shù)名(參數(shù)表) {函數(shù)體}”。
在某基類中聲明為 virtual 并在一個(gè)或多個(gè)派生類中被重新定義的成員函數(shù),用法格式為:;實(shí)現(xiàn)多態(tài)性,通過(guò)指向派生類的基類指針或引用,訪問(wèn)派生類中同名覆蓋成員函數(shù)。
簡(jiǎn)單地說(shuō),那些被virtual關(guān)鍵字修飾的成員函數(shù),就是虛函數(shù)。
首先:強(qiáng)調(diào)一個(gè)概念定義一個(gè)函數(shù)為虛函數(shù),不代表函數(shù)為不被實(shí)現(xiàn)的函數(shù)。定義它為虛函數(shù)是為了允許用基類的指針來(lái)調(diào)用子類的這個(gè)函數(shù)。定義一個(gè)函數(shù)為純虛函數(shù),才代表函數(shù)沒(méi)有被實(shí)現(xiàn)。定義純虛函數(shù)是為了實(shí)現(xiàn)一個(gè)接口,起到一個(gè)規(guī)范的作用,規(guī)范繼承這個(gè)類的程序員必須實(shí)現(xiàn)這個(gè)函數(shù)。
class Animal
{
public:
//Speak函數(shù)就是虛函數(shù)
//函數(shù)前面加上virtual關(guān)鍵字,變成虛函數(shù),那么編譯器在編譯的時(shí)候就不能確定函數(shù)調(diào)用了。
virtual void speak()
{
cout << "動(dòng)物在說(shuō)話" << endl;
}
};
class Cat :public Animal
{
public:
void speak()
{
cout << "小貓?jiān)谡f(shuō)話" << endl;
}
};
int main() {
Animal* a = new Cat(); //
a->speak();//小貓?jiān)谡f(shuō)話
Animal b = Cat();
b.speak();//動(dòng)物在說(shuō)話,不明白這里為什么沒(méi)有發(fā)生多態(tài)
system("pause");
return 0;
}
這個(gè)例子是虛函數(shù)的一個(gè)典型應(yīng)用,通過(guò)這個(gè)例子,也許你就對(duì)虛函數(shù)有了一些概念。它虛就虛在所謂“推遲聯(lián)編”或者“動(dòng)態(tài)聯(lián)編”上,一個(gè)類函數(shù)的調(diào)用并不是在編譯時(shí)刻被確定的,而是在運(yùn)行時(shí)刻被確定的。由于編寫(xiě)代碼的時(shí)候并不能確定被調(diào)用的是基類的函數(shù)還是哪個(gè)派生類的函數(shù),所以被成為“虛”函數(shù)。 虛函數(shù)只能借助于指針或者引用來(lái)達(dá)到多態(tài)的效果。
到此這篇關(guān)于什么是虛函數(shù)的文章就介紹到這了,更多相關(guān)什么是虛函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一篇文章帶你了解C語(yǔ)言二分查找的簡(jiǎn)單應(yīng)用
這篇文章主要介紹了二分查找算法在C語(yǔ)言程序中的使用示例,文中最后提到了使用二分查找法一個(gè)需要注意的地方,需要的朋友可以參考下2021-08-08
利用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易版掃雷
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易版掃雷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-02-02
C語(yǔ)言中qsort函數(shù)用法及用冒泡排序?qū)崿F(xiàn)
qsort函數(shù)是由C語(yǔ)言提供的標(biāo)準(zhǔn)庫(kù)函數(shù), 它的實(shí)現(xiàn)思想是快速排序。這篇文章主要介紹了C語(yǔ)言中qsort函數(shù)用法及用冒泡排序?qū)崿F(xiàn)qsort函數(shù)功能,需要的可以參考一下2022-10-10
Visual Studio Code上添加小程序自動(dòng)補(bǔ)全插件的操作方法
這篇文章主要介紹了Visual Studio Code上添加小程序自動(dòng)補(bǔ)全插件的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
C語(yǔ)言雙向鏈表實(shí)現(xiàn)根據(jù)使用頻率安排元素位置的功能實(shí)例代碼
這篇文章主要介紹了C語(yǔ)言雙向鏈表實(shí)現(xiàn)根據(jù)使用頻率安排元素位置的功能實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
C語(yǔ)言工程文件該如何寫(xiě)(以三子棋游戲?yàn)槔?
工程上寫(xiě)代碼應(yīng)分為多個(gè)文件,那么你知道C語(yǔ)言工程文件該如何寫(xiě)嗎,本文就以以三子棋游戲?yàn)槔?介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09

