C 中的函式隱藏

2021-06-26 04:53:51 字數 596 閱讀 5544

只要基類在定義成員函式時已經宣告了virtual關鍵字,在派生類實現的時候覆蓋該函式時,virtual關鍵字可加可不加,不影響多型的實現。

容易與隱藏混淆:

隱藏是指派生類的函式遮蔽了與其同名的基類函式,規則如下:

1) 如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

2) 如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual關鍵字。此時,基類的函式被隱藏(注意這種情況與函式過載的區別,過載發生在同乙個類中。)。

#includeusing namespace std;

class base

請大家注意,f()函式屬於覆蓋,而g()與h()屬於隱藏。從上面的執行結果,我們可以注意到在覆蓋中,用基類指標和派生類指標呼叫函式f()時,系統都是執行的派生類函式f(),而非基類的f()。而在隱藏方式中,用基類指標和派生類指標呼叫函式g()、h()時,系統會進行區分,基類指標呼叫時,系統執行基類的g()、h(),而派生類指標呼叫時,系統「隱藏」了基類的f(),執行派生類的f(),這也就是「隱藏」的由來。

C 中的虛函式的隱藏規則

在程式設計中遇到乙個奇怪的問題,在繼承類無法呼叫基類中定義的乙個public函式,編譯時總是說函式呼叫的參數列不正確,很是鬱悶.在網上搜尋之後,發現原因是 在基類中有定義有多個同名的函式 例如exec 但參數列是不同的,其中乙個是虛函式,在繼承類中實現.這樣的話,在繼承類中就無法呼叫基類中定義的其他...

C 中的函式過載 覆蓋與隱藏

在c 語言中,函式扮演著很重要的角色,不管面向過程設計,還是基於物件設計 不管是物件導向程式設計,還是基於泛型程式設計,函式都可以隨處而見。在談論c 中的函式過載 覆蓋和隱藏之前,先回顧下函式的基礎知識。函式的宣告包括函式的返回值型別,函式名稱,引數列表 引數的型別 引數的個數 引數的順序 例如,宣...

C 中的函式過載 覆蓋與隱藏

在c 語言中,函式扮演著很重要的角色,不管面向過程設計,還是基於物件設計 不管是物件導向程式設計,還是基於泛型程式設計,函式都可以隨處而見。在談論c 中的函式過載 覆蓋和隱藏之前,先回顧下函式的基礎知識。函式的宣告包括函式的返回值型別,函式名稱,引數列表 引數的型別 引數的個數 引數的順序 例如,宣...