c 繼承,組合

2021-09-06 16:20:55 字數 1067 閱讀 999

1

.什麼是繼承

a繼承b,說明a是b的一種,並且b的所有行為對a都有意義

eg:a=woman b=human

a=鴕鳥 b=鳥 (不行),因為鳥會飛,但是鴕鳥不會。

2.什麼是組合

若在邏輯上a是b的「一部分」(a part of),則不允許b從a派生,而是要用a和其它東西組合出b。

例如眼(eye)、鼻(nose)、口(mouth)、耳(ear)是頭(head)的一部分,所以類head應該由類eye、nose、mouth、ear組合而成,不是派生而成

3.繼承的優點和缺點

優點:

容易進行新的實現,因為其大多數可繼承而來。

易於修改或擴充套件那些被復用的實現。

缺點:

破壞了封裝性,因為這會將父類的實現細節暴露給子類。

「白盒」復用,因為父類的內部細節對於子類而言通常是可見的。

當父類的實現更改時,子類也不得不會隨之更改。

從父類繼承來的實現將不能在執行期間進行改變。

4.組合的優點和缺點

優點:

容器類僅能通過被包含物件的介面來對其進行訪問。

「黑盒」復用,因為被包含物件的內部細節對外是不可見。

封裝性好。

實現上的相互依賴性比較小。(被包含物件與容器物件之間的依賴關係比較少)

每乙個類只專注於一項任務。

通過獲取指向其它的具有相同型別的物件引用,可以在執行期間動態地定義(物件的)組合。

缺點:

導致系統中的物件過多。

為了能將多個不同的物件作為組合塊(composition block)來使用,必須仔細地對介面進行定義。

5.兩者的選擇

is-a關係用繼承表達,has-a關係用組合表達

繼承體現的是一種專門化的概念而組合則是一種組裝的概念

另外確定是組合還是繼承,最清楚的方法之一就是詢問是否需要新類向上對映,也就是說當我們想重用原型別作為新型別的內部實現的話,我們最好自己組合,如果我們不僅想重用內部實現而且還想重用介面的話,那就用繼承。

6.法則:優先使用(物件)組合,而非(類)繼承

c 繼承和組合

當建立乙個物件時,編譯器總是確保呼叫了所有的子物件的建構函式,如果子物件有自己的預設建構函式,那麼編譯器可以自動地呼叫它們。但是,如果子物件沒有預設建構函式,或者想改變建構函式的某個預設引數,這就會出現問題,因為這個新類的建構函式沒有權利訪問這個子物件的私有資料成員,所有不能直接對它們初始化。解決的...

C 繼承與組合

類的組合和繼承一樣,是軟體重用的重要方式。組合和繼承都是有效地利用已有類的資源。但二者的概念和用法不同。通過繼承建立了派生類與基類的關係,它是一種 是 is a 的關係,如 白貓是貓 黑人是人 派生類是基類的具體化實現,是基類中的一 種。通過組合建立了成員類與組合類 或稱復合類 的關係,換句話說就是...

C 回顧 繼承和組合

一 組合語法 實際上,我們一直在用組合建立類,只不過是在用內部資料型別或已存在類的物件組合新類。二 繼承語法 在 中和原來一樣給出該類的名字,但在類的左括號的前面,加乙個冒號和基類的名字 對於多重繼承,要給出多個基類名,它們之間用逗號分開 當做完這些時,將會自動地得到基類中的資料成員和成員函式。在繼...