C 派生類覆蓋過載基類函式

2022-05-08 22:06:11 字數 769 閱讀 5471

派生類希望基類過載函式可見,情況有三種:

a)派生類中覆蓋某個版本,則某個版本可見,全部都覆蓋重寫,則全部版本可見。

b)派生類中乙個也不覆蓋,則全部基類版本可見。

c)派生類需要新增新的過載版本,同時又需要可見基類的過載版本,此時並不是必須全部覆蓋重寫全部版本。可在派生類中用using宣告基類過載的函式。

說明:對派生類沒有重新定義的過載版本的訪問實際上是對using宣告點的訪問。

兩種注意點:

a)指向派生類的基類指標或引用,不可呼叫派生類中的過載函式。

原因:靜態編譯名字查詢先於型別檢查,在基類中找到同名函式,就不喊在派生類中繼續找,而基類不存在目標呼叫形式的函式

b)若不用using宣告基類的過載版函式,派生類物件不可呼叫基類的過載版本。

原因:派生類的函式,隱藏了基類的同名函式。

所以如果基類的某個函式f有多個過載版本,如果其派生類想使用所有這些版本的f函式(注意是直接呼叫f而不是顯式呼叫基類::f)的話,必須覆蓋所有這些f,或者乙個都不覆蓋。

這樣就很煩,那麼我們可以使用using宣告。

假如基類為base,派生類為derived,其中base內部定義有多個不同版本的過載函式f,如f(int),f(char),f(string)...

using base::f

這樣,我們就可以直接用derived物件/指標/引用呼叫base類的所有f函式了。

如:

derived x;

x.f(int);

x.f(char);

C 基類和派生類

本講討論基類和派生類的基本概念。通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。在c 語言中,乙個派生類可以從乙個基類派生,也可...

C 基類和派生類

本講討論基類和派生類的基本概念。通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。在 c 語言中,乙個派生類可以從乙個基類派生,也...

C 基類和派生類

通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。在c 語言中,乙個派生類可以從乙個基類派生,也可以從多個基類派生。從乙個基類派生...