網(wǎng)站開發(fā)用的那些語言怎么在百度發(fā)布自己的文章
歸納編程學(xué)習(xí)的感悟,
記錄奮斗路上的點(diǎn)滴,
希望能幫到一樣刻苦的你!
如有不足歡迎指正!
共同學(xué)習(xí)交流!
🌎歡迎各位→點(diǎn)贊 👍+ 收藏? + 留言?📝
成功的秘訣就在于多努力一次!
一起加油!
目錄
一、前言:
二、虛函數(shù)的聲明:
三、虛函數(shù)的調(diào)用:?
💦????????例:虛函數(shù)實(shí)現(xiàn)動態(tài)聯(lián)編。
🔑說明:
四、總結(jié):
五、共勉:?
一、前言:
? ? ? ? 上一節(jié)中,基類的指針既可以指向基類的對象,又可以指向派生類的對象。但是,當(dāng)它指向派生類的對象時,并沒有按照期望調(diào)用派生類中的GetArea()函數(shù)它仍然調(diào)用基類的GetArea()函數(shù)導(dǎo)致運(yùn)行結(jié)果出錯。要解決這個問題就要用虛函數(shù)。
????????虛函數(shù)是實(shí)現(xiàn)動態(tài)聯(lián)編的基礎(chǔ),它是一種動態(tài)的重載方式,它允許在運(yùn)行時建立函數(shù)調(diào)用與函數(shù)體之間的聯(lián)系,也就是在運(yùn)行時才決定如何動作,即動態(tài)聯(lián)編。
????????基類的指針指向它的公有派生對象時,訪問公有派生類中繼承自基類的公有成員,可采用顯式的方法,如GetArea(),或采用指針強(qiáng)制類型轉(zhuǎn)換的方法:p=&r; p->GetArea();
? ? ? ? 但這兩種方法都沒有達(dá)到動態(tài)調(diào)用的效果,若要實(shí)現(xiàn)動態(tài)的調(diào)用功能,需要將函數(shù)Area0聲明為虛函數(shù)。
二、虛函數(shù)的聲明:
????????虛函數(shù)是一個在基類中聲明為 virtual的函數(shù),并在一個或多個派生類中被重新定義的成員函數(shù),虛函數(shù)的聲明格式如下:
????????????????????????virtual <返回值類型><函數(shù)名>(<參數(shù)表>);
????????虛函數(shù)的定義非常簡單,就是基類的函數(shù)加上一個 virtual說明,基類中聲明為 virtual的函數(shù)一般在派生類中需要重新定義。
????????在重新定義時,參數(shù)的類型和個數(shù)必須相同,一旦一個函數(shù)被聲明為虛函數(shù),則無論聲明它的類被繼承了多少層,在每一層派生類中該函數(shù)都繼續(xù)保持虛函數(shù)特性。?
三、虛函數(shù)的調(diào)用:?
????????如果某個類中一個成員函數(shù)被說明為虛函數(shù),意味著該成員函數(shù)在派生類中可能有不同的函數(shù)實(shí)現(xiàn),當(dāng)使用對象指針或?qū)ο笠谜{(diào)用虛函數(shù)時,采用動態(tài)聯(lián)編方式,即在運(yùn)行時進(jìn)行關(guān)聯(lián)或綁定。
💦????????例:虛函數(shù)實(shí)現(xiàn)動態(tài)聯(lián)編。
#include<iostream>
using namespace std;
class mybase
{private:int a,b;public:mybase(int x,int y):a(x),b(y){ }virtual void show(){cout<<"基類 mybase"<<endl;cout<<a<<" "<<b<<endl; }
};
class myclass:public mybase
{private:int c;public:myclass(int x,int y,int z):mybase(x,y),c(z){ }void show(){cout<<"派生類 myclass"<<endl;cout<<"c="<<c<<endl; }
};
int main()
{mybase mb(50,50),*pm;myclass mc(10,20,30);pm=&mb;pm->show();pm=&mc;pm->show();return 0;
}
🔑說明:
? ? ? ? (1)虛函數(shù)與重載不同,虛函數(shù)參數(shù)類型個數(shù)完全相同。
????????(2)定義一個基類的對象指針或者基類對象引用,就可以指向不同派生類的對象同時調(diào)用不同派生類的虛函數(shù)。這就是動態(tài)聯(lián)編的結(jié)果。?
四、總結(jié):
- 虛函數(shù)的定義非常簡單,就是基類的函數(shù)加上一個 virtual說明,基類中聲明為 virtual的函數(shù)一般在派生類中需要重新定義。
- 在重新定義時,參數(shù)的類型和個數(shù)必須相同,一旦一個函數(shù)被聲明為虛函數(shù),則無論聲明它的類被繼承了多少層,在每一層派生類中該函數(shù)都繼續(xù)保持虛函數(shù)特性。?
- 虛函數(shù)與重載不同,虛函數(shù)參數(shù)類型個數(shù)完全相同。
- 定義一個基類的對象指針或者基類對象引用,就可以指向不同派生類的對象同時調(diào)用不同派生類的虛函數(shù)。這就是動態(tài)聯(lián)編的結(jié)果。?
五、共勉:?
????????以上就是我對C++多態(tài)性——(3)動態(tài)聯(lián)編的實(shí)現(xiàn)——虛函數(shù)的理解,希望本篇文章對你有所幫助,也希望可以支持支持博主,后續(xù)博主也會定期更新學(xué)習(xí)記錄,記錄學(xué)習(xí)過程中的點(diǎn)點(diǎn)滴滴。如果有不懂和發(fā)現(xiàn)問題的小伙伴,請?jiān)谠u論區(qū)說出來哦,同時我還會繼續(xù)更新對C++多態(tài)性的理解,請持續(xù)關(guān)注我哦!!!?