派生類希望基類過載函式可見,情況有三種:
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 語言中,乙個派生類可以從乙個基類派生,也可以從多個基類派生。從乙個基類派生...