程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++虛函數示例解讀

C++虛函數示例解讀

編輯:C++入門知識

C++編程語言中有一種比較特殊的函數叫做虛函數。我們應該如何正確的理解C++虛函數呢?在這裡我們將會針對這一方面的基本概念進行一個詳細的介紹,希望能給大家帶來一些幫助,提高對C++語言的認知程度。

老鳥級的C++編程高手我想都掌握了虛函數的作用哇,我沒說自己是老鳥),但新手我想定是看虛函數一章有點頭疼,或看懂了但在實際中用不出來,別急,讓我來說上一回。
何為虛函數?C++虛函數就是被關鍵字virtaul說明的函數。

舉個例子:

這個例子中WindowB和WindowC不同時存在,這在實際應用中是常有的情況,為了節省內存。

  1. class WindowA  
  2. {  
  3. public:   
  4. virtual void Draw(){};  
  5. };  
  6. class WindowB:public WindowA  
  7. {  
  8. public:  
  9. WindowB(){};  
  10. void Draw();  
  11. };  
  12. class WindowC:public WindowA  
  13. {  
  14. public:  
  15. WindowC(){};  
  16. void Draw();  
  17. };  
  18. void WindowB::Draw()  
  19. {  
  20. 畫一個圓;  
  21. }  
  22. void WindowC::Draw()  
  23. {  
  24. 畫一個正方形;  

當在定義WindowA時,不確定它的派生類WindowB和WindowC在Draw函數中要畫什麼,這時把Draw定義成C++虛函數,在派生類中具體實現。

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

是的,是少寫了,如你所說,你會如此使用:

  1. WindowB* b = new WindowB;  
  2. b->Draw(); //畫個圓  
  3. delete b;  
  4. WindowC* c = new WindowC;  
  5. c->Draw(); //畫個正方形  
  6. delete c; 

我這裡用指針實現,在上面的代碼中,b和c是兩個獨立的對象的指針。但如果派生類不是一兩個,而是幾十個,幾百個,那你該怎麼辦呢?在頭文件中定義幾百個變量?

非也,到時候用C++虛函數的作用了:

  1. WindowA* a = new WindowsB;  
  2. a->Draw(); //畫個圓,此處調用了WindowB中的Draw函數實現  
  3. ifa)  
  4. delete a; //new 出來的一定要delete  
  5. WindowA* a=new WindowC;  
  6. a->Draw(); //畫個正方形,此處調用了WindowC中的Draw函數實現  
  7. ifa)  
  8. delete a; 

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved