C++虛函數示例解讀
C++編程語言中有一種比較特殊的函數叫做虛函數。我們應該如何正確的理解C++虛函數呢?在這里我們將會針對這一方面的基本概念進行一個詳細的介紹,希望能給大家?guī)硪恍椭?,提高對C++語言的認知程度。
老鳥級的C++編程高手我想都掌握了虛函數的作用(哇,我沒說自己是老鳥),但新手我想定是看虛函數一章有點頭疼,或看懂了但在實際中用不出來,別急,讓我來說上一回。 
何為虛函數?C++虛函數就是被關鍵字virtaul說明的函數。
舉個例子:
這個例子中WindowB和WindowC不同時存在,這在實際應用中是常有的情況,為了節(jié)省內存。
- 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()
 - {
 - 畫一個圓;
 - }
 - void WindowC::Draw()
 - {
 - 畫一個正方形;
 - }
 
當在定義WindowA時,不確定它的派生類WindowB和WindowC在Draw函數中要畫什么,這時把Draw定義成C++虛函數,在派生類中具體實現。
說到這,讀者會問:那我把Draw在WindowB和WindowC中寫好,還會少寫一個類WindowA。
是的,是少寫了,如你所說,你會如此使用:
- WindowB* b = new WindowB;
 - b->Draw(); //畫個圓
 - delete b;
 - WindowC* c = new WindowC;
 - c->Draw(); //畫個正方形
 - delete c;
 
我這里用指針實現,在上面的代碼中,b和c是兩個獨立的對象的指針。但如果派生類不是一兩個,而是幾十個,幾百個,那你該怎么辦呢?在頭文件中定義幾百個變量?
非也,到時候用C++虛函數的作用了:
- WindowA* a = new WindowsB;
 - a->Draw(); //畫個圓,此處調用了WindowB中的Draw函數實現
 - if(a)
 - delete a; //new 出來的一定要delete
 - WindowA* a=new WindowC;
 - a->Draw(); //畫個正方形,此處調用了WindowC中的Draw函數實現
 - if(a)
 - delete a;
 
在上面的代碼中,a實現了一個中轉變量的作用,只要是從WindowA派生的,我都能賦值給a,而b和c都是臨時變量。再來多少個WindowA的派生類都沒問題了,我只要在頭文件中定義一個WindowA的指針變量就行了。
【編輯推薦】















 
 
 






 
 
 
 