c++程式開發中,設計孤立的模擬較容易,設計相互關聯的類卻比較難,這其中會涉及到兩個概念,乙個是繼承(inheritance),乙個是組合。因為二者有一定的相似性,往往令程式設計師混淆不清。類的組合和繼承一樣,是軟體重用的重要方式。組合和繼承都是有效地利用已有類的資源。但二者的概念和用法不同。
不要覺得「不吃白不吃」,讓乙個好端端的健壯青年無緣無故地吃人參補身體。
二、如果類b 有必要使用a 的功能,則要分兩種情況考慮:
(1)若在邏輯上b 是a 的「一種」(a kind of ),則允許b 繼承a 的功能。如男人(man)是人(human)的一種,男孩(boy)是男人的一種。那麼類man 可以從類human 派生,類boy 可以從類man 派生。示例程式如下:
(2)若在邏輯上a 是b 的「一部分」(a part of),則不允許b 繼承a 的功能,而是要用a和其它東西組合出b。例如眼(eye)、鼻(nose)、口(mouth)、耳(ear)是頭(head)的一部分,所以類head 應該由類eye、nose、mouth、ear 組合而成,不是派生而成。示例程式如下:
上述程式十分簡短並且執行正確,但是這種設計卻是錯誤的。這就開頭所說的很多程式設計師經不起「繼承」的**而犯下設計錯誤。
附:何為組合:
比如有兩個類a、b,c類由a.b繼承而來,
下面就是組合模式,有點像零件的拼裝
classa;
classb;
class
c;
免費領取c++資料報
C 繼承與組合
類的組合和繼承一樣,是軟體重用的重要方式。組合和繼承都是有效地利用已有類的資源。但二者的概念和用法不同。通過繼承建立了派生類與基類的關係,它是一種 是 is a 的關係,如 白貓是貓 黑人是人 派生類是基類的具體化實現,是基類中的一 種。通過組合建立了成員類與組合類 或稱復合類 的關係,換句話說就是...
繼承與組合
題目描述 已知類如下 1 birthdate 生日類 含有 year,month,day 等資料成員 2 teacher 教師類 含有 num,name,等資料成員 3 professor 教授類 含有 教師類和生日類的資料成員 要求 1 通過對teacher和birthdate使用繼承和組合的方式...
繼承與組合
繼承與組合 繼承是實現類重用的重要手段,但繼承有乙個最大的壞處 就是破壞封裝,相比之下,組合也是實現類重用的重要方式,而採用組合方式來實現類重用則能提供更好的封裝性。繼承特點 繼承子類擴充套件,得到父類的屬性和方法。許可權允許的情況,子類可以直接訪問父類的屬性和方法,極大的破壞了封裝的特性 從而造成...