過載的條件是在同乙個作用域內,兩個同名的不同引數列表的函式(返回值型別不做考慮)之間形成過載關係。
派生類宣告了乙個與基類同名的函式(成員變數也可以),函式名相同,引數列表無所謂。
訪問方式:物件名.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 翻譯過來是 重置,覆蓋,使原來的失去效果。先來說說過載的含義,在日常生活中我們經常要清洗一些東西,比如洗車 洗衣服。儘管我們說話的時候並沒有明確地說用洗車的方式來洗車,或者用洗衣服的方式來洗一件衣服,但是誰也不會用洗衣...