c 中虛函式與功能晚繫結

2021-06-27 07:48:56 字數 745 閱讀 6764

再說這個問題之前,我們先來看個程式;

#include

using namespace std;

class bird

};class bigbird:public bird

};class smallbird:public bird

編譯時就已經將diaoyongshow()中p與bird類的show()繫結到一起了,所以即使你給的實參是bird的派生類,呼叫的也是bird中的show();

那麼該如何解決這個問題呢?

這就涉及到了c++中功能晚繫結——virtual了

virtual 的使用形式是:

virtual 函式型別  函式名稱(形參值)

函式體意義:

當基類中的某個函式被宣告為虛函式後,此虛函式就可以在乙個或多個函式中被重新定義。

在此程式中,「virtual」會告訴編譯器,函式呼叫「p.show()」時要在執行時才能確定所呼叫的具體函式,因此,程式在執行時根據引用p所引用的具體物件來呼叫具體的函式

所以這個程式應該這樣寫:

#include

using namespace std;

class bird

};class bigbird:public bird

};class smallbird:public bird

{public :

void show()

{cout<<"this is a smallbird"《你們懂了嗎???

繫結與虛函式

繫結 程式自身彼此關聯的過程,確定程式中的操作呼叫與執行該操作的 間的關係。靜態繫結 繫結過程出現在編譯階段,用物件名或者類名來限定要呼叫的函式。動態繫結 繫結過程工作在程式執行時執行,在程式執行時才確定將要呼叫的函式。虛函式 虛函式是動態繫結的基礎。是非靜態的成員函式。在類的宣告中,在函式原型之前...

虛函式與動態繫結

在定義基類時,我們希望基類中的有些函式可以在派生類中重新定義。比如,我們定義了基類記錄的書,可以求出買了多少書花了多少錢 而在派生類中,我們定義的是打折的書,還是要計算買了多少書花了多少錢。這時,就需要重新定義計算錢數的函式了。注意,這裡的重新定義,與之前講過的函式過載或者操作符過載不同 後面兩類,...

C 中函式與虛函式

基類的析構函式需要宣告為虛函式 當 derived class 物件經由乙個base class指標被刪除,而該base class帶著乙個non virtual析構函式,實際執行時通常發生的是物件的derived成分沒有被銷毀。區域性銷毀 class base base protected int...