(1)派生類的訪問屬性
? ? ? ? ? ?1)public繼承:派生類中:可以訪問基類的public和protect變量,不可以訪問基類的private變量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 派生類外:可以訪問基類的public變量,不能訪問基類的private變量
? ? ? ? ? ? 2)protect繼承:派生類中:可以訪問基類的public和protect變量,不可以訪問基類的private變量
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?派生類外:都不可以訪問
? ? ? ? ? ? 3)private繼承:派生類中:都不可以訪問
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?派生類外:都不可以訪問
(2)派生類的構造函數
? ? ? ? ? ? ? ? 派生類中包含所有基類的數據成員和派生類中新增的數據成員(包括其他類的對象(子對象)和普通數據成員)。
? ? ? ? ? 1)對于基類成員和子對象成員的初始化必須在成員初始化列表中進行,新增成員的初始化既可以在成員初始化列表中進行,也可以在構造函數體中進行。
? ? ? ? ? 2)派生類構造函數的初始化順序:基類的構造函數,子對象的構造函數,派生類構造函數體。
? ? ? ? ?3)當派生類中出現多個基類時,處于同一層次的各個基類的構造函數的調用順序取決于定義派生類時聲明的順序(自左向右),而與派生類構造函數的成員初始化列表給出的順序無關。
? ? ? ? ?4)如果派生類的基類也是一個派生類,則每個派生類只需復雜其直接基類的構造,依次上溯。
? ? ? ? ?5)當派生類中有多個子對象時,各個子對象的構造函數的調用順序也取決于派生類宏定義的順序(自前往后),而與派生類構造函數的成員初始化列表給出的順序無關。
? ? ? ? ?6)派生類構造函數提供將參數傳遞給基類構造函數的途徑,以保證基類進行初始化時能夠獲得必要的順序,如果基類的構造函數中定義了一個或多個參數,派生類必須定義構造函數。
? ? ? ? ?7)如果基類定義了默認構造函數或根本沒有定義一個構造函數,在派生類構造函數的定義中可以省略對基類構造函數的調用。
? ? ? ? ?8)子對象的情況同7)基類。
? ? ? ? ?9)當所有的基類或子對象的構造函數都可以省略時,可以省略派生類構造函數的成員初始化列表。
? ? ? ? 10)如果所有基類和子對象都不需要參數,派生類也不需要參數時,派生類構造函數可以不定義。
(3)派生類的析構函數
? ? ? ? ? ? 在派生時,派生類不能繼承基類的析構函數,但是需要通過派生類的析構函數去調用基類的析構函數,析構函數的調用順序與構造函數的調用順序正好相反,首先調用派生類的析構函數,然后調用成員類對象的析構函數,最后調用基類的析構函數。
? ? ? ? ? ? 析構函數調用場景:
? ? ? ? ? ? ? ? ? ? ? 1)對象生命周期結束被銷毀時(一般類成員的指針變量與引用都不自動調用析構函數)。
? ? ? ? ? ? ? ? ? ? ? 2)delete指向對象的指針時,或delete指向對象的基類類型指針,而其基類虛構函數是虛函數時。
? ? ? ? ? ? ? ? ? ? ? 3)對象i是對象o的成員,o的析構函數被調用時,對象i的析構函數也被調用。?