程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中繼續與組合的差別具體解析

C++中繼續與組合的差別具體解析

編輯:關於C++

C++中繼續與組合的差別具體解析。本站提示廣大學習愛好者:(C++中繼續與組合的差別具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中繼續與組合的差別具體解析正文


C++的“繼續”特征可以進步法式的可復用性。正由於“繼續”太有效、太輕易用,才要避免亂花“繼續”。我們要給“繼續”立一些應用規矩:

1、假如類A 和類B 絕不相干,弗成認為了使B 的功效更多些而讓B 繼續A 的功效。

不要認為“不吃白不吃”,讓一個好端真個硬朗青年事出有因地吃人參補身材。

2、假如類B 有需要應用A 的功效,則要分兩種情形斟酌:

(1)若在邏輯上B 是A 的“一種”(a kind of ),則許可B 繼續A 的功效。如漢子(Man)是人(Human)的一種,男孩(Boy)是漢子的一種。那末類Man 可以從類Human 派生,類Boy 可以從類Man 派生。示例法式以下:

class Human
{
  …
};
class Man : public Human
{
  …
};
class Boy : public Man
{
  …
};

(2)若在邏輯上A 是B 的“一部門”(a part of),則不許可B 繼續A 的功效,而是要用A和其它器械組合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是頭(Head)的一部門,所以類Head 應當由類Eye、Nose、Mouth、Ear 組合而成,不是派生而成。示例法式以下:

class Eye
{
public:
  void Look(void);
};
class Nose
{
public:
  void Smell(void);
};
class Mouth
{
public:
  void Eat(void);
};
class Ear
{
public:
  void Listen(void);
};
// 准確的設計,冗雜的法式
class Head
{
public:
  void Look(void) { m_eye.Look(); }
  void Smell(void) { m_nose.Smell(); }
  void Eat(void) { m_mouth.Eat(); }
  void Listen(void) { m_ear.Listen(); }
private:
  Eye m_eye;
  Nose m_nose;
  Mouth m_mouth;
Ear m_ear;
};

假如許可Head 從Eye、Nose、Mouth、Ear 派生而成,那末Head 將主動具有Look、Smell、Eat、Listen 這些功效:

// 毛病的設計
class Head : public Eye, public Nose, public Mouth, public Ear
{
};

上述法式非常冗長而且運轉准確,然則這類設計倒是毛病的。這就開首所說的許多法式員經不起“繼續”的引誘而犯下設計毛病。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved