一 繼承中的同名成員變數處理方法
1、當子類成員變數與父類成員變數同名時
2、子類依然從父類繼承同名成員
3、在子類中通過作用域分辨符::進行同名成員區分(在派生類中使用基類的同名成員,顯式地使用類名限定符)
4、同名成員儲存在記憶體中的不同位置
繼承和static關鍵字在一起會產生什麼現象哪?
理論知識
ø 基類定義的靜態成員,將被所有派生類共享
ø 根據靜態成員自身的訪問特性和派生類的繼承方式,在類層次體系中具有不同的訪問性質 (遵守派生類的訪問控制)
ø 派生類中訪問靜態成員,用以下形式顯式說明:
類名 :: 成員
或通過物件訪問 物件名 . 成員
總結:1> static函式也遵守3個訪問原則
2> static易犯錯誤(不但要初始化,更重要的顯示的告訴編譯器分配記憶體)
3> 建構函式預設為private
多繼承概念
ø 乙個類有多個直接基類的繼承關係稱為多繼承
ø 多繼承宣告語法
class 派生類名 : 訪問控制 基類名1 , 訪問控制 基類名2 , … , 訪問控制 基類名n
資料成員和成員函式宣告
ø 類 c 可以根據訪問控制同時繼承類 a 和類b 的成員,並新增
自己的成員
多繼承的派生類構造和訪問
ø 多個基類的派生類建構函式可以用初始式呼叫基類建構函式初始化資料成員
ø 執行順序與單繼承建構函式情況類似。多個直接基類建構函式執行順序取決於定義派生類時指定的各個繼承基類的順序。
ø 乙個派生類物件擁有多個直接或間接基類的成員。不同名成員訪問不會出現二義性。如果不同的基類有同名成員,派生類物件訪問時應該加以識別。
二 虛繼承
如果乙個派生類從多個基類派生,而這些基類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性
分析:
總結:
ø 如果乙個派生類從多個基類派生,而這些基類又有乙個共同
的基類,則在對該基類中宣告的名字進行訪問時,可能產生
二義性ø 如果在多條繼承路徑上有乙個公共的基類,那麼在繼承路徑的某處
匯合點,這個公共基類就會在派生類的物件中產生多個基類子物件
ø 要使這個公共基類在派生類中只產生乙個子物件,必須對這個基類
宣告為虛繼承,使這個基類成為虛基類。
ø 虛繼承宣告使用關鍵字 virtual
實驗:注意增加virtual關鍵字後,構造函式呼叫的次數。
ø 繼承是物件導向程式設計實現軟體重用的重要方法。程式設計師可以在已有基類的基礎上定義新的派生類。
ø 單繼承的派生類只有乙個基類。多繼承的派生類有多個基類。
ø 派生類對基類成員的訪問由繼承方式和成員性質決定。
ø 建立派生類物件時,先呼叫基類建構函式初始化派生類中的基類成員。呼叫析構函式的次序和呼叫建構函式的次序相反。
ø c++提供虛繼承機制,防止類繼承關係中成員訪問的二義性。
ø 多繼承提供了軟體重用的強大功能,也增加了程式的複雜性。
C 複習要點總結之八 繼承一
一 不同的繼承方式會改變繼承成員的訪問屬性 public 修飾的成員變數 方法 在類的內部和外部都可以使用。protected 修飾的成員變數 方法在類的內部使用,在繼承的子類中使用,類的外部不能使用。是為了在家族中使用,為了得到繼承!private 修飾的成員變數 方法 只能在類的內部使用,不能在...
C 複習要點總結十一 多型(二)
1 物件中的vptr指標什麼時候被初始化?物件在建立的時,由編譯器對vptr指標進行初始化 只有當物件的構造完全結束後vptr的指向才最終確定 父類物件的vptr指向父類虛函式表 子類物件的vptr指向子類虛函式表 二 父類指標步長和子類指標步長不一致時 class parent virtual v...
c 複習要點總結z之十二 STL string
1string概念 string是stl的字串型別,通常用來表示字串。而在使用string之前,字串通常是用char 表示的。string與char 都可以用來表示字串,那麼二者有什麼區別呢。string和char 的比較 string是乙個類,char 是乙個指向字元的指標。string封裝了ch...