c++基礎:繼承與組合!
阿新 • • 發佈:2020-12-30
C++程式開發中,設計孤立的類比較容易,設計相互關聯的類卻比較難,這其中會涉及到兩個概念,一個是繼承(Inheritance),一個是組合。因為二者有一定的相似性,往往令程式設計師混淆不清。類的組合和繼承一樣,是軟體重用的重要方式。組合和繼承都是有效地利用已有類的資源。但二者的概念和用法不同。
一、如果類A 和類B 毫不相關,不可以為了使B 的功能更多些而讓B 繼承A 的功能。
不要覺得“不吃白不吃”,讓一個好端端的健壯青年無緣無故地吃人蔘補身體。
二、如果類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繼承而來,
下面就是組合模式,有點像零件的拼裝
class A
{
//...
};
class B
{
//...
};
class C
{
A a;
B b;
};
免費領取C++資料包