代碼重用的手段,利用已有的類。
組合:類似于使用工具,現(xiàn)有的類作為子對象。砍樹:斧頭作為子對象
繼承:類似于學(xué)習(xí)本領(lǐng),現(xiàn)有的類作為師父。砍樹:拜師練習(xí)砍樹的本領(lǐng)。
不論是繼承還是組合,在子類中,父類或者成員對象都作為子對象存在于一塊內(nèi)存之中。因為構(gòu)造函數(shù)只初始化本層次的內(nèi)容,所以在進(jìn)入構(gòu)造函數(shù)之前,子對象的構(gòu)造一定要完成,這是c++強制要做的,因為不能讓一個未初始化的對象存在。只有在初始化列表中初始化子對象。
子類中調(diào)用構(gòu)造函數(shù)的次序:先調(diào)用父類構(gòu)造函數(shù),再調(diào)用子對象構(gòu)造函數(shù),按其聲明順序來,并不按照其在初始化列表中的順序。析構(gòu)相反。
名字隱藏:在繼承中,只要子類中出現(xiàn)父類函數(shù)的名字,其他名字全部被隱藏(包括修改了參數(shù)和返回值),虛函數(shù)暫不涉及(提前報告,虛函數(shù)在子類中不能修改返回值)。
但是修改了基類函數(shù)的參數(shù)和返回值相當(dāng)于修改了接口。
非自動繼承的函數(shù):
構(gòu)造函數(shù)(拷貝構(gòu)造函數(shù))、析構(gòu)函數(shù)、operator=操作符。如果不創(chuàng)建,編譯器會自動創(chuàng)建。我們創(chuàng)建構(gòu)造函數(shù)和賦值操作符的時候,最好顯式地調(diào)用父類和成員對象的構(gòu)造函數(shù)和賦值操作符。
所有的多重繼承都可以用單繼承實現(xiàn)。
向上類型轉(zhuǎn)換
原理:子類和父類的基地址相同,子類可以向上類型轉(zhuǎn)換為父類,編譯器將該地址做為父類的基地址。必須是引用或者指針。
應(yīng)該使用繼承還是應(yīng)該使用組合,看是否需要向上類型轉(zhuǎn)換。
posted on 2012-06-04 14:37
Dino-Tech 閱讀(201)
評論(0) 編輯 收藏 引用