1. 程式人生 > 其它 >c++基礎:繼承與組合!

c++基礎:繼承與組合!

技術標籤:C++c++程式語言pythonlinux資料庫

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++資料包
在這裡插入圖片描述