類繼承的作用域 函式隱藏 過載函式覆蓋

2022-05-06 16:12:10 字數 988 閱讀 1340

一、基類與派生類的作用域關係

1、每個類定義自己的作用域,在這個作用域內我們定義類的成員;

2、派生類的作用域位於基類作用域之內;

二、成員函式呼叫

1、乙個物件、引用或指標的靜態型別決定了該物件的哪些成員是可見的;即使靜態型別與動態型別可能不一致,但我們能使用哪些成員仍然是有靜態型別決定的

2、名字衝突與繼承:派生類能重用定義在其直接基類或間接基類中的名字,此時定義在內層作用域(即派生類)的名字將隱藏定義在外層作用域(即基類)的名字;

3、通過作用域運算子來使用隱藏的成員:

struct

derived : base //

...};

4、名字查詢先於型別檢查:

(1)宣告在內層作用域的函式並不會過載宣告在外層作用域的函式(定義派生類中的函式也不會過載其基類中的成員函式);

(2)如果派生類的成員與基類的某個成員同名,則派生類將在其作用域內隱藏該基類成員;即使派生類成員與基類成員的形參列表不一致,基類成員仍然會被隱藏掉(但是可用基類指標來訪問基類被覆蓋的函式);

可用override關鍵字來避免出現派生類重寫虛函式時,出現函式引數不一致情況;

7、虛函式與作用域:如果基類與派生類的虛函式接受的實參不同,則無法通過基類指標或引用呼叫派生類的虛函式;

二、覆蓋過載的函式:

1、場景:派生類需要覆蓋基類過載函式集合中的部分而非全部函式;

2、說明:

(1)成員函式無論是否是虛函式都能被過載;

(2)派生類可以覆蓋過載函式的0個或多個例項(全部覆蓋或者乙個都不覆蓋)

(3)要過載的基類函式在派生類中必須可以訪問;

3、實現

(1)using宣告語句:

(2)重新定義過載函式集合中的部分函式,當用派生類呼叫時,會呼叫派生中被重寫的函式;

(3)對派生類沒有重新定義的過載版本函式的訪問實際上是對using宣告點的訪問;

類成員函式的過載 繼承 隱藏

過載 相同的範圍 在同乙個類中 函式名相同 引數不同 virtual關鍵字可有可無 過載與繼承 隱藏很好區分,因為過載函式在同乙個類中 舉例說明 include using namespace std class base void f float x int main 結果繼承不同的範圍 分別位於...

類成員函式的過載 繼承 隱藏

過載 相同的範圍 在同乙個類中 函式名相同 引數不同 virtual關鍵字可有可無 過載與繼承 隱藏很好區分,因為過載函式在同乙個類中 舉例說明 include using namespace std class base void f float x int main 結果繼承不同的範圍 分別位於...

類成員函式的過載 繼承 隱藏

過載 相同的範圍 在同乙個類中 函式名相同 引數不同 virtual關鍵字可有可無 過載與繼承 隱藏很好區分,因為過載函式在同乙個類中 舉例說明 include using namespace std class base void f float x int main 結果繼承不同的範圍 分別位於...