第15章 物件導向程式設計 8

2021-09-30 09:45:10 字數 1003 閱讀 4714

15.4 建構函式和複製控制

建構函式和複製控制成員不能繼承,每個類定義自己的建構函式和複製控制成員。

15.4.1基類建構函式和複製控制

某些類需要只希望派生類使用的特殊建構函式,這樣的建構函式定義為protected。

15.4.2 派生類建構函式

派生類的建構函式受繼承關係的影響,每個派生類建構函式除了初始化自己的資料成員之外,還要初始化基類。

1. 合成的派生類預設建構函式

派生類的合成預設建構函式與非派生的建構函式只有一點不同:除了初始化派生類的資料成員之外,它還初始化派生類物件的基類部分。基類部分由基類的預設建構函式初始化。

2. 定義預設建構函式

3. 向基類建構函式傳遞實參

派生類建構函式的初始化列表只能初始化派生類的成員,不能直接初始化繼承成員。相反,派生類建構函式通過將基類包含在建構函式初始化列表中間接初始化繼承成員。

class base

};class child:base

};

建構函式初始化列表為類的基類和成員提供初始值,它並不指定初始化的執行次序。首先初始化基類,然後根據宣告次序初始化派生類的成員。

4. 在派生類建構函式中使用預設實參

5. 只能初始化直接基類

乙個類只能初始化自己的直接基類。直接基類就是在派生列表中指定的類。

重構包括重新定義類層次,將操作和/或資料從乙個類移到另乙個類。為了適應應用程式的需要而重新設計類以便增加新函式或處理其他改變時,最有可能需要進行重構。

建構函式只能初始化其直接基類的原因是每個類都定義了自己的介面。一旦類定義了自己的介面,與該類物件的所有互動都應該通過該介面,即使物件是派生類物件的一部分也不例外。

同樣,派生類建構函式不能初始化基類的成員且不應該對基類成員賦值。如果那些成員為public或protected,派生建構函式可以在建構函式函式體中給基類成員賦值,但是,這樣做會違反基類的介面。派生類應通過使用基類建構函式尊重基類的初始化意圖,而不是在派生類建構函式函式體中對這些成員賦值。

第15章 物件導向程式設計

派生類中的虛函式可以返回基類函式所返回型別的派生類的引用或指標。只有指定為虛函式的成員函式才能進行動態繫結。派生類可以進一步限制但不能放鬆對所繼承的成員的訪問。使用private或protected派生的類不繼承基類的介面,稱為實現繼承。使用class保留字定義的派生類預設具有private繼承,而...

第 15章 物件導向程式設計(一)

以quote基類和bulk quote派生類為例,記錄標頭檔案和cpp檔案的構成。目錄 基類和派生類的標頭檔案及cpp檔案結構 quote.h quote.cpp bulk quote.h bulk quote.cpp main.cpp ifndef quote h define quote h i...

第15章 物件導向程式設計 3

15.2.4 virtual與其他成員函式 c 中的函式呼叫預設不使用動態繫結。要出動動態繫結,必須滿足兩個條件 第一,只有指定為虛函式的成員函式才能進行動態繫結,成員函式預設為非虛函式,非虛函式不進行動態繫結 第二,必須通過基類型別的引用或指標進行函式呼叫。1.從派生類到基類的轉換 因為每個派生類...