上面提到動態多型主要通過虛函式機制實現,這裡介紹以下虛函式。和普通的函式宣告方式相同,只要在函式的返回值前加上virtual關鍵字,該函式就為虛函式,即virtual 函式型別 函式名(形式引數)
虛函式的作用:允許通過基類的指標或引用來訪問基類和派生類的同名函式。
#include using namespace std;
class teacher};
class mathteacher :public teacher};
class chinsesteachar :public teacher};
class englishteachar :public teacher};
int main()
return 0;
}
可以通過基類的指標區訪問派生的方法。
在c++中不能宣告虛建構函式,但可以宣告虛析構函式。虛析構函式的作用就是為了:防止因基類指標指向派生類的物件而造成的記憶體洩漏問題。
上面提到,通過基類指標可以指向派生類的物件,從而使用派生類方法。如果基類的析構函式不是虛函式的話,編譯器在執行時,就不會動態繫結,從而就是導致編譯器指呼叫了基類的析構函式,而沒有呼叫派生類的析構函式,這樣就會有潛在的記憶體洩漏的風險。而通過虛析構函式可以解決這一問題。
建構函式為什麼不能是虛函式?
因為虛函式的執行依賴於虛函式表,而虛函式表的初始化是在建構函式中完成,所以建構函式無法宣告為虛函式。
為什麼預設的析構函式不是虛函式?
虛函式的工作是基於虛函式表的,而虛函式表時需要消耗空間的。而在程式中又不一定又繼承,所以預設的析構函式不是虛函式。
總結:乙個類的建構函式無法被宣告為虛函式,而析構函式則可以宣告為虛函式。如果程式中存在繼承那麼最好將析構函式設定為虛析構函式。
//宣告格式:virtual 函式型別 函式名( 引數列表 ) =0; 可以沒有函式體的實現
virtual int fun(int n,int m)=0;
擁有純虛函式的類,為抽象類。抽象類不能例項化物件。抽象類的子類會自動繼承該純虛函式,如果子類中任然沒有實現該方法,那麼該子類任然為純虛函式。 virtual 虛函式
virtual 虛函式 下面是對c 的虛函式這玩意兒的理解。一,什麼是虛函式 如果不知道虛函式為何物,但有急切的想知道,那你就應該從這裡開始 簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性 polymorphism 多型性是將介面與實現進...
關於virtual虛函式
1.如果父類定義的是普通virtual函式,1 父類必須提供乙個實現 2 子類如果不需要實現它,可以不在函式成員中列出來,或者類檔案中列出來,不提供實現也可以 子類如果要實現它,則必須在函式成員中列出來 2.如果父類定義的是純virtual函式 1 如果子類仍是個抽象類,可以不宣告它 2 如果子類不...
virtual 虛函式補充
class base private int ma class derived public base intmain 這裡分析一下p show 的反彙編 p show 將p的裡面存的值放到eax暫存器,這裡是derived物件的位址 00864b1d mov eax,dword ptr p 將ea...