虛函式為了過載和多型:父類和子類之間的關係
class base
純虛函式:子類與子類之間的關係
因為在父類中純虛函式(介面)沒有實現,這樣做的原因就是派生出多個子類時候,都通過介面來完成各自的操作,換句話說
如果從抽象類派生若干子類,則這些子類必須都要使用抽象類中定義的那些純虛函式,因為純虛函式必須在子類裡面重寫,不然
沒辦法建立子類物件(如果不在派生類中重寫基類的純虛函式,則派生類也是乙個抽象類,抽象類只能建立引用指標)
過載: 函式名相同,引數列表不同(返回值型別不能作為判斷過載的標誌),過載出現在乙個類的內部。
重寫:子類中重新定義父類中有相同名稱和引數的虛函式,出現在繼承關係中。
1.被重寫的函式必須是virtual的不能是static
2.被重寫後的函式跟之前的必須:返回值,函式名,引數列表都一樣
3.訪問許可權可以改變,重寫後可以改為protected,private等
重定義:子類中重新定義父類中非virtual函式, 引數列表跟重定義前的不一致也叫重定義,靠函式名保證;也叫隱藏
1.呼叫的時候可以強制轉換成父類型別來呼叫。
純虛函式和虛函式都能實現 」不同的子類具有不同的操作「 這樣乙個特性;
父類的純虛函式必須在子類中「重寫」, 父類的虛函式在子類中可以不「重寫」, 也可以「重寫」。
別人的栗子:
#include class animal
virtual void run() const{}
// 虛函式
// 普通函式
};class dog: public animal
void make_sound2() const {}
void run() const
};class fish :public animal
void make_sound2() const
int main(int, char**)
C 虛函式 純虛函式
1 基本概念 虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。您可能想要在基類中定義虛函式,以便在派生類中重新定義該函...
C 虛函式 純虛函式
1.析構函式是否應為虛函式問題?2.成員函式的虛函式問題?3.析構函式是否可以為純虛函式問題?說明 僅在使用父類指標指向子類物件時有區別 當析構函式非虛函式時,使用父類指標指向子類物件,在析構時將不會呼叫子類析構函式 當析構函式是虛函式時,使用分類指標指向子類物件,在析構時會呼叫子類析構函式,且呼叫...
C 虛函式 純虛函式
include qdebug class animal void animal animal 即要實現基類animal的animal函式 假如在dog子類中沒有實現animal 函式,則會呼叫基類的animal 函式。即列印 what is the animal 假如在dog子類中實現了animal...