標籤:問控制 列表 最好 移動 存在 protect 添加 規則 繼承
衍生類別經常(但不總是)覆蓋它繼承的虛函數。如果衍生類別沒有覆蓋其基類中的某個虛函數,則該虛函數的行為類似於其他的普通成員,衍生類別會直接繼承其在基類中的版本。
c++11允許衍生類別顯式地註明它使用某個成員函數覆蓋了它繼承的虛函數。具體做法是在形參列表後面、或者在const成員函數的const關鍵字後面、或者在引用成員函數的引用限定符後面添加一個關鍵字override。
衍生類別也必須使用基類的建構函式來初始化它的基類部分。(除非基類沒有顯式定義建構函式,這樣在衍生類別的建構函式中可以不顯式調用基類的建構函式)
我們可以把公用衍生類別當做基類使用,衍生類別可以賦值給基類,基類的引用或者指標可以綁定到衍生類別上(反之不行)。
遵循基類的介面:
儘管在文法上來說我們可以在衍生類別建構函式體內給它的共有或者受保護的基類成員賦值,但是最好不要這麼做。和使用基類的其他場合一樣,衍生類別應該遵循基類的介面,並通過調用基類的建構函式來初始化那些從基類中繼承而來的成員。
如果基類定義了一個靜態成員,則在整個繼承體系中只存在該成員的唯一定義。不論基類中派生出來多少個衍生類別,對於每個靜態成員都只存在唯一的執行個體。靜態成員也要遵循通用的存取控制規則,public,private,protected。
如果我們想要將某個類用作基類,則該類必須是已經定義了的而不能僅僅聲明。這意味著,一個類不能派生它本身。
有時候我們會定義這樣一種類,我們不希望其他類繼承它,或者不想考慮它是否適合作為一個基類,為了實現這一目的,c++11提供了一種防止繼承發生的方法,即在類名後跟一個關鍵字final。
當我們用一個衍生類別對象為一個基類對象初始化或者賦值時,只有該衍生類別對象中的基類部分會被拷貝、移動或賦值,它的派生部分會被忽略掉。
如果運算式既不是指標也不是引用,那麼它的動態類型永遠與靜態類型一致,如果是指標或者引用,將產生動態綁定,動態類型直到運行時才可知,而靜態類型在編譯時間就總是已知的。
c++——衍生類別和基類轉換