代碼重用的手段,利用已有的類。
組合:類似于使用工具,現有的類作為子對象??硺洌焊^作為子對象
繼承:類似于學習本領,現有的類作為師父??硺洌喊輲熅毩暱硺涞谋绢I。
不論是繼承還是組合,在子類中,父類或者成員對象都作為子對象存在于一塊內存之中。因為構造函數只初始化本層次的內容,所以在進入構造函數之前,子對象的構造一定要完成,這是c++強制要做的,因為不能讓一個未初始化的對象存在。只有在初始化列表中初始化子對象。
子類中調用構造函數的次序:先調用父類構造函數,再調用子對象構造函數,按其聲明順序來,并不按照其在初始化列表中的順序。析構相反。
名字隱藏:在繼承中,只要子類中出現父類函數的名字,其他名字全部被隱藏(包括修改了參數和返回值),虛函數暫不涉及(提前報告,虛函數在子類中不能修改返回值)。
但是修改了基類函數的參數和返回值相當于修改了接口。
非自動繼承的函數:
構造函數(拷貝構造函數)、析構函數、operator=操作符。如果不創建,編譯器會自動創建。我們創建構造函數和賦值操作符的時候,最好顯式地調用父類和成員對象的構造函數和賦值操作符。
所有的多重繼承都可以用單繼承實現。
向上類型轉換
原理:子類和父類的基地址相同,子類可以向上類型轉換為父類,編譯器將該地址做為父類的基地址。必須是引用或者指針。
應該使用繼承還是應該使用組合,看是否需要向上類型轉換。
posted on 2012-06-04 14:37
Dino-Tech 閱讀(203)
評論(0) 編輯 收藏 引用