過載,同名隱藏與覆蓋

2021-09-26 03:14:06 字數 1224 閱讀 5084

過載的條件是在同乙個作用域內兩個同名的不同引數列表的函式(返回值型別不做考慮)之間形成過載關係。

派生類宣告了乙個與基類同名的函式(成員變數也可以),函式名相同,引數列表無所謂

訪問方式:物件名.fun() 訪問到的函式是在派生類中新增的成員函式。

被隱藏之後的從基類繼承的同名函式,依然存在。訪問方式: 物件名.直接基類::fun();

派生類宣告了乙個與基類同名的函式(成員變數也可以),函式名相同,引數列表相同基類中該函式為virtual, virtual多繼承的同名基類函式在派生類中只有乙個。

因為派生類中基類成員與新增成員作用域不同,基類成員作用域大於派生類成員作用域。所以不構成過載。根據標誌符隱藏規則,基類成員將被隱藏。

如果存在兩個或者多個互相包含的作用域,外層宣告了乙個標誌符,而內層沒有宣告該標誌符。則該標誌符在內層作用域是可見的。如果內層作用域宣告了同名的標誌符,則外層作用域的標誌符在內層作用域被隱藏。

class base1

class base2

class base3 : public base1, public base2

base3 obj;

虛基類定義方式:

class base1 :virtual public base0

|虛基類是在派生類的定義過程中產生的。宣告基類為派生類的虛基類。宣告了虛基類後,虛基類的成員在進一步派生的過程中,與派生類一起維護同乙個記憶體資料實體。

虛基類的建構函式:

如果虛基類沒有預設建構函式(也就是無參建構函式),那麼在虛基類的整個繼承關係(直接繼承,間接繼承)中都需要在建構函式的成員初始化列表中列出對虛基類的初始化。

構造乙個類物件的一般順序:

如果該類存在虛基類,則先呼叫虛基類的建構函式完成對虛基類成員的初始化。

如果該類存在其他基類,則按照在繼承宣告列表**現的次序,分別執行它們的建構函式,但構造過程中不再執行他們的虛基類的建構函式。

按照在類定義**現的次序,對新增成員物件進行初始化。對於類型別的成員物件,如果出現在建構函式初始化列表中,則以其中指定的引數執行建構函式。如果未出現在初始化列表中,則執行預設建構函式。對於其他基本資料型別的成員,如果出現在初始化列表中,則按照其指定的引數初始化。如果未出現在初始化列表中,則什麼也不做。

執行建構函式體。

過載 覆蓋與隱藏

一 總結如下表 函式名均相同 引數返回值型別 virtual有無 類別父類子類間 方法為public 繼承為public同同 必須有override同異 有編譯不通過同 均可無hide異均可 無關hide 同一類內同異 無關編譯不通過異 均可無關 overload 二 幾點說明 override 重...

覆蓋 隱藏與過載

1 相同的範圍 在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字可有可無。2 覆蓋是指派生類函式覆蓋基類函式,特徵是 1 不同的範圍 分別位於派生類與基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字。例如 class base結果 a為基類指向派生類...

函式過載 覆蓋與隱藏

overload 翻譯過來就是 超載,過載,過載,超出標準負荷 override 翻譯過來是 重置,覆蓋,使原來的失去效果。先來說說過載的含義,在日常生活中我們經常要清洗一些東西,比如洗車 洗衣服。儘管我們說話的時候並沒有明確地說用洗車的方式來洗車,或者用洗衣服的方式來洗一件衣服,但是誰也不會用洗衣...