函式覆蓋發生在父類與子類之間,其函式名、引數型別、返回值型別必須同父類中的相對應被覆蓋的函式嚴格一致,覆蓋函式和被覆蓋函式只有
函式體不同,當派生類物件呼叫子類中該同名函式時會自動呼叫子類中的覆蓋版本,而不是父類中的被
覆蓋函式版本,這種機制就叫做函式覆蓋。
覆蓋函式,即在子類中用相同的函式名和簽名重寫父類的方法,虛函式,在子類中用相同的函式名和簽名重寫父類的方法(前面有virtual關鍵字) 編輯
總結:呼叫函式的時候,關鍵看物件的型別 。
記住是物件的型別,不管是
指標還是引用(同樣是物件的型別)。
好了有了物件的型別就好辦了。當你用這個物件(或者是
指標、引用)去呼叫函式時,
1:該物件(實體)即不是
指標或引用的形式,可以輕鬆的呼叫函式。
2:但是當我們用引用或
指標形式時,有個問題是區別指標(引用)的型別和指標(引用)所指實體物件的型別。
a:你用
指標來呼叫某函式,若函式是非
虛函式,非虛函式是
靜態編譯的(即編譯時刻確定的)。也就是說他不會去
虛函式表找這個函式(因為不是虛函式),因 此呼叫的是
指標型別的那個類的相關函式。即使派生類有這個函式(這是實際程式設計時的大忌!!!)。這就是 你的void functiona() const ;
b: 當你用這個
指標去呼叫乙個
虛函式時,他就到
虛函式表中,找這個名字的函式,從指標所指物件的型別(即派生類)依次向父類走,直到遇到第乙個與次匹配的函式名。
虛函式的覆蓋
今天遇到乙個挺有趣的例子來說明虛函式的覆蓋問題,如下 include using namespace std struct b void g const struct d b 覆蓋b f void g struct dd d void g const void call const b b int ...
虛函式 以及覆蓋
虛函式以及覆蓋 class a 分析class a中宣告乙個虛函式 f 派生類中class b 對這個虛函式進行了覆蓋,重新定義。a pa new a 中申明乙個a類得指標,並宣告乙個物件。所以 pa f 結果應該為 a b pb b pa 把基類a的指標轉化為派生類b的指標pb 但是pa並沒有變化...
虛函式,覆蓋和多型
一.函式宣告中的virtual關鍵字 形如 class 類名 的成員函式,稱為虛函式或方法 class shape 一.在子類中覆蓋基類的虛函式 如果子類的成員函式和基類的虛函式具有相同的函式原型,那麼該成員函式就也是虛函式,無論其是否帶有virtual關鍵字,且對基類的虛函式構成覆蓋 class ...