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