一、基類與派生類的作用域關係
1、每個類定義自己的作用域,在這個作用域內我們定義類的成員;
2、派生類的作用域位於基類作用域之內;
二、成員函式呼叫
1、乙個物件、引用或指標的靜態型別決定了該物件的哪些成員是可見的;即使靜態型別與動態型別可能不一致,但我們能使用哪些成員仍然是有靜態型別決定的
2、名字衝突與繼承:派生類能重用定義在其直接基類或間接基類中的名字,此時定義在內層作用域(即派生類)的名字將隱藏定義在外層作用域(即基類)的名字;
3、通過作用域運算子來使用隱藏的成員:
structderived : 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 結果繼承不同的範圍 分別位於...