C 虛函式解析

2021-10-04 14:24:44 字數 1002 閱讀 5734

在c++中,在基類的成員函式宣告前加上關鍵字virtual即可讓該函式成為虛函式,派生類中對此函式的不同實現都會繼承這一修飾符,允許後續派生類覆蓋,達到遲繫結的效果。即便是基類中的成員函式呼叫虛函式,也會呼叫到派生類中的版本

例如,乙個基類animal有乙個虛函式eat。子類fish要實做乙個函式eat(),這個子類fish與子類wolf是完全不同的,但是你可以引用類別 animal 底下的函式eat()定義,而使用子類fish底下函式eat()的程序。

以下**是 c++ 的程式示例。要注意的是,這個示例沒有異常處理的**。尤其是new或是vector::push_back丟出乙個異常時,程式在執行時有可能會出現崩潰或是錯誤的現象。

#include #include using namespace std;

class animal    

virtual ~animal() {}

}; class wolf : public animal}; class fish : public animal}; class goldfish : public fish};  class otheranimal : public animal{}; int main()    return 0;}

以下是虛函式animal::eat()的輸出:

i eat like a generic animal.i eat like a wolf!i eat like a fish!i eat like a goldfish!i eat like a generic animal.

當animal::eat()不是被宣告為虛函式時,輸出如下所示:

i eat like a generic animal.i eat like a generic animal.i eat like a generic animal.i eat like a generic animal.i eat like a generic animal.

c 虛函式解析

c 的多型性用一句話概括就是 在基類的函式前加上virtual關鍵字,在派生類中重寫該函式,執行時將會根據物件的實際型別來呼叫相應的函式。如果物件型別是派生類,就呼叫派生類的函式 如果物件型別是基類,就呼叫基類的函式 1.用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。2.存在...

C 虛函式解析

具體內容請參見 陳浩部落格之c vtable解析 我只是為了更加理解這裡面說明的要點,所以自己編寫了幾個對應與他部落格內容的幾個小demo,大家可以按照這幾個demo來進行實驗,這樣更加方便的理解這裡面的知識。如果有什麼疑問,大家可以在當前位置提問,或者可以去我的github上new乙個issue!...

解析C 中虛函式

c 中的乙個重要特徵是多型即使用同名函式實現不同的功能,多型分為編譯時的多型和執行時的多型,編譯時的多型主要是指運算子過載和函式過載,而執行時的多型主要是指派生類和虛函式的多型,即使用基類的應用或指標可以引用派生類中的方法 不能引用基類中沒有而派生類中新增的方法 如果沒有指明是虛函式,指向派生類的指...