1寞焙、組合與繼承
組合關(guān)系:不破壞封裝,整體類與局部類之間松耦合互婿,彼此相對獨立捣郊。具有較好的可擴展性。支持動態(tài)組合慈参。在運行時呛牲,整體對象可以選擇不同類型的局部對象。整體類可以對局部類進行包裝驮配,封裝局部類的接口娘扩,提供新的接口。整體類不能自動獲得和局部類同樣的接口壮锻。創(chuàng)建整體類的對象時琐旁,需要創(chuàng)建所有局部類的對象。
繼承關(guān)系:破壞封裝猜绣,子類與父類之間緊密耦合灰殴,子類依賴于父類的實現(xiàn),子類缺乏獨立性掰邢。支持擴展牺陶,但是往往以增加系統(tǒng)結(jié)構(gòu)的復(fù)雜度為代價。不支持動態(tài)繼承尸变。在運行時义图,子類無法選擇不同的父類。子類不能改變父類的接口召烂。子類能自動繼承父類的接口。創(chuàng)建子類的對象時娃承,無須創(chuàng)建父類的對象奏夫。
2、虛函數(shù)與多態(tài)
? ? 當(dāng)對某個虛函數(shù)通過指針或引用調(diào)用時历筝,編譯器產(chǎn)生的代碼直到運行時才能確定應(yīng)該調(diào)用哪個版本的函數(shù)酗昼。被調(diào)用的函數(shù)是與綁定到指針或引用上的對象的動態(tài)類型相匹配的那一個。
? ? OOP的核心思想是多態(tài)性梳猪。多態(tài)性這個詞源自希臘語麻削,其含義是“多種形式”蒸痹。我們把具有繼承關(guān)系的多個類型稱為多態(tài)類型,因為我們能使用這些類型的“多種形式”而無需在意它們的差異呛哟。引用或指針的靜態(tài)類型與動態(tài)類型不同這一事實正是C++語言支持多態(tài)性的根本所在叠荠。
? ? 當(dāng)我們使用基類的引用或指針調(diào)用基類中定義的一個函數(shù)時,我們并不知道該函數(shù)真正作用的對象是什么類型扫责,因為它可能是一個基類的對象也可能是一個派生類的對象榛鼎。如果該函數(shù)是虛函數(shù),則直到運行時才會決定到底執(zhí)行哪個版本鳖孤,判斷的依據(jù)是引用或指針所綁定的對象的真實類型者娱。