C++中如何使用虛函數(shù)

C++中如何使用虛函數(shù),針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供法庫(kù)企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為法庫(kù)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

何為虛函數(shù)?C++虛函數(shù)就是被關(guān)鍵字virtaul說明的函數(shù)。

舉個(gè)例子:

這個(gè)例子中WindowB和WindowC不同時(shí)存在,這在實(shí)際應(yīng)用中是常有的情況,為了節(jié)省內(nèi)存。

class WindowA  {  public:   virtual void Draw(){};  };  class WindowB:public WindowA  {  public:  WindowB(){};  void Draw();  };  class WindowC:public WindowA  {  public:  WindowC(){};  void Draw();  };  void WindowB::Draw()  {  畫一個(gè)圓;  }  void WindowC::Draw()  {  畫一個(gè)正方形;  }

當(dāng)在定義WindowA時(shí),不確定它的派生類WindowB和WindowC在Draw函數(shù)中要畫什么,這時(shí)把Draw定義成C++虛函數(shù),在派生類中具體實(shí)現(xiàn)。

說到這,讀者會(huì)問:那我把Draw在WindowB和WindowC中寫好,還會(huì)少寫一個(gè)類WindowA。

是的,是少寫了,如你所說,你會(huì)如此使用:

WindowB* b = new WindowB;  b->Draw(); //畫個(gè)圓  delete b;  WindowC* c = new WindowC;  c->Draw(); //畫個(gè)正方形  delete c;

我這里用指針實(shí)現(xiàn),在上面的代碼中,b和c是兩個(gè)獨(dú)立的對(duì)象的指針。但如果派生類不是一兩個(gè),而是幾十個(gè),幾百個(gè),那你該怎么辦呢?在頭文件中定義幾百個(gè)變量?

非也,到時(shí)候用C++虛函數(shù)的作用了:

WindowA* a = new WindowsB;  a->Draw(); //畫個(gè)圓,此處調(diào)用了WindowB中的Draw函數(shù)實(shí)現(xiàn)  if(a)  delete a; //new 出來的一定要delete  WindowA* a=new WindowC;  a->Draw(); //畫個(gè)正方形,此處調(diào)用了WindowC中的Draw函數(shù)實(shí)現(xiàn)  if(a)  delete a;

在上面的代碼中,a實(shí)現(xiàn)了一個(gè)中轉(zhuǎn)變量的作用,只要是從WindowA派生的,我都能賦值給a,而b和c都是臨時(shí)變量。再來多少個(gè)WindowA的派生類都沒問題了,我只要在頭文件中定義一個(gè)WindowA的指針變量就行了。

關(guān)于C++中如何使用虛函數(shù)問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

網(wǎng)站名稱:C++中如何使用虛函數(shù)
轉(zhuǎn)載來源:http://muchs.cn/article4/ihdeoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站制作移動(dòng)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站排名、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)