当前位置:天才代写 > tutorial > C语言/C++ 教程 > 高质量C++/C编程指南-第10章-类的担任与组合(2)

高质量C++/C编程指南-第10章-类的担任与组合(2)

2017-11-07 08:00 星期二 所属: C语言/C++ 教程 浏览:562

10.2 组合
l 【法则10-2-1】若在逻辑上A是B的“一部门”(a part of),则不答允B从A派生,而是要用A和其它对象组合出B。

譬喻眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部门,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成。如示例10-2-1所示。

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;

};

示例10-2-1 Head由Eye、Nose、Mouth、Ear组合而成

假如答允Head从Eye、Nose、Mouth、Ear派生而成,那么Head将自动具有Look、 Smell、Eat、Listen这些成果。示例10-2-2十分简短而且运行正确,可是这种设计要领却是差池的。

// 成果正确而且代码简捷,可是设计要领差池。

class Head : public Eye, public Nose, public Mouth, public Ear

{

};

示例10-2-2 Head从Eye、Nose、Mouth、Ear派生而成

一只公鸡使劲地追打一只刚下了蛋的母鸡,你知道为什么吗?

因为母鸡下了鸭蛋。

许多措施员经不起“担任”的诱惑而犯下设计错误。“运行正确”的措施不见得是高质量的措施,此处就是一个例证。

 

    关键字:

天才代写-代写联系方式