c 的虛函式使用

2021-08-09 22:53:08 字數 990 閱讀 9245

虛函式的使用

之前的**如下:

#include using namespace std;

class base //定義基類base

void disp() //定義成員函式

};class base1 :public base //定義公有派生類base1

void disp() //定義同名函式

};void main()

結果如下:

分析:objp =&obj1,指標指向了物件obj1,呼叫的函式仍然是基類物件的函式,而不是派生類物件的函式。沒有達到目標。

使用虛函式,即可消除二義性。

之後的**如下:(使用虛函式)

#include using namespace std;

class base //定義基類base

virtual void disp() //定義成員函式,使用虛函式

};class base1 :public base //定義公有派生類base1

void disp() //定義同名函式

};void main()

結果如下: 

分析:對於虛函式呼叫來說,每乙個物件內部都有乙個虛表指標,該虛表指標被初始化為本類的虛表。所以在程式中,不管物件型別如何轉換,但該物件內部的虛表指標是固定的,所以才能實現動態的物件函式呼叫,這就是c++多型性實現的原理。

note:虛函式的定義在基類中進行,即只有基類中的函式才能被定義為虛函式,在派生類中不能定義某個函式為虛函式。

C 虛函式的使用

這兩天看了c 虛函式的相關機制,有必要記錄下自己的心得體會。c 的虛函式機制主要依賴c 的指標和引用的靜態型別 編譯時確定的型別 和動態型別 執行時確定的型別 的不同來實現動態繫結的,也就是在執行時來確定基類指標和引用的型別,是本身基類型別還是其某個子類型別。這樣,就可以在動態時確定通過指標或者引用...

C 虛函式和虛析構函式的使用

main.cpp c test12 include using namespace std class a a virtual a void funa void funb virtual void funb void a funa void a funb class b public a b voi...

C 中虛函式的使用

c 中重要的特性 封裝 繼承和多型。其中多型體現在多個類之間的關係上,也是設計模式中常用的一種特性。多型和繼承聯絡在一起,子類繼承父類的行為同時會改變父類的行為。在這其中虛函式起了重要的作用。虛函式一般使用在什麼情況下呢?如果我們只關注程式本省的行為,同時沒有繼承關係,那麼函式是否為虛函式根本無關緊...