c 虛函式的理解

2021-09-25 06:47:34 字數 1162 閱讀 9622

虛函式的作用:可以讓成員函式操作一般化,用基類的指標指向不同的派生類的物件時, 基類指標呼叫其虛成員函式,則會呼叫其真正指向物件的成員函式, 而不是基類中定義的成員函式(只要派生類改寫了該成員函式)。 若不是虛函式,則不管基類指標指向的哪個派生類物件,呼叫時都 會呼叫基類中定義的那個函式。

示例(不使用虛函式):

#include using namespace std;

class b0

};class b1:public b0

};class d1 :public b1

};void fun(b0 *ptr)

int main(void)

輸出結果:

b0::display()

b0::display()

b0::display()

示例(加虛函式):

#include using namespace std;

class b0

};class b1:public b0

};class d1 :public b1

};void fun(b0 *ptr)

int main(void)

輸出結果:

b0::display()

b1::display()

d1::display()

虛函式是動態繫結的基礎。

是非靜態的成員函式。

在類的宣告中,在函式原型之前寫virtual。

virtual 只用來說明類宣告中的原型,不能用在函式實現時。

具有繼承性,基類中宣告了虛函式,派生類中無論是否說明,同原型函式都自動為虛函式。

本質:不是過載宣告而是覆蓋。

呼叫方式:通過基類指標或引用,執行時會根據指標指向的物件的類,決定呼叫哪個函式。

到這個地方還沒完,其實完全可以不用父類型別的指標,直接建立子類物件來呼叫子類的普通函式也是可以的啊,為什麼非要使用虛函式呢?

雖然這樣說,但是實際開發過程中不是這樣的,當我們使用一些類庫、框架的時候,這些類庫、框架是事先就寫好的。我們在使用的時候不能直接修改類庫的原始碼,我們只能派生類庫中的類來覆蓋一些成員函式以實現我們的功能,但這些成員函式有的是由框架呼叫的。這種情況下,用虛函式是很好的辦法。

c 虛函式 的理解

class a virtual void print class b public a void print class c public b void print int main 個人的淺顯理解,歡迎大神拍磚怒噴,1 虛函式 虛函式可以看做介面,乙個父類提供乙個虛函式,則 每個子類可以實現自己不...

對C 虛函式的理解

關於類不斷被繼承的過程,從整體上看,是乙個從抽象到逐漸具體化的過程,基類可以是非常非常抽象的東西,而最終例項化的派生類就非常具體了。虛函式的意義,就在於定義了乙個從最早的基類到最終的派生類都可能會用到 根據需求可以選擇重新實現還是不重新實現,但純虛函式必須實現,關於原因,我已經在其他文章說過 的乙個...

C 虛函式 純虛函式 虛析構函式的個人理解

離過年還有一周半,加緊完成自己的計畫,自律 自由!學習到c 多型,離不開的就是虛函式 純虛函式 虛析構函式,虛函式與純虛函式的核心就是vft和vft 這點原理不再多述 比較好的部落格羅列如下 對於將基類的析構函式用virtual關鍵字宣告,我個人的理解如下 個人理解在基類中將析構函式宣告為虛函式和多...