高质量C++/C编程指南-第10章-类的担任与组合(1)
当前位置:以往代写 > C/C++ 教程 >高质量C++/C编程指南-第10章-类的担任与组合(1)
2019-06-13

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

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

工具(Object)是类(Class)的一个实例(Instance)。假如将工具比作屋子,那么类就是屋子的设计图纸。所以面向工具设计的重点是类的设计,而不是工具的设计。 对付C++措施而言,设计孤独的类是较量容易的,难的是正确设计基类及其派生类。本章仅仅阐述“担任”(Inheritance)和“组合”(Composition)的观念。

留意,当前面向工具技能的应用热点是COM和CORBA,这些内容超出了C++课本的领域,请阅读COM和CORBA相关论著。

10.1 担任
假如A是基类,B是A的派生类,那么B将担任A的数据和函数。譬喻:

class A

{

public:

void Func1(void);

void Func2(void);

};

class B : public A

{

public:

void Func3(void);

void Func4(void);

};

main()

{

B b;

b.Func1(); // B从A担任了函数Func1

b.Func2(); // B从A担任了函数Func2

b.Func3();

b.Func4();

}

这个简朴的示例措施说明白一个事实:C++的“担任”特性可以提高措施的可复用性。正因为“担任”太有用、太容易用,才要防备乱用“担任”。我们该当给“担任”立一些利用法则。

l 【法则10-1-1】假如类A和类B绝不相关,不行觉得了使B的成果更多些而让B担任A的成果和属性。不要以为“白吃白不吃”,让一个好端端的结实青年无缘无故地吃人参补身体。

l 【法则10-1-2】若在逻辑上B是A的“一种”(a kind of ),则答允B担任A的成果和属性。譬喻汉子(Man)是人(Human)的一种,男孩(Boy)是汉子的一种。那么类Man可以从类Human派生,类Boy可以从类Man派生。

class Human

{

};

class Man : public Human

{

};

class Boy : public Man

{

};

u 留意事项

【法则10-1-2】看起来很简朴,可是实际应用时大概会有意外,担任的观念在措施世界与现实世界并不完全沟通。

譬喻从生物学角度讲,鸵鸟(Ostrich)是鸟(Bird)的一种,按理说类Ostrich应该可以从类Bird派生。可是鸵鸟不能飞,那么Ostrich::Fly是什么对象?

class Bird

{

public:

virtual void Fly(void);

};

class Ostrich : public Bird

{

};

譬喻从数学角度讲,圆(Circle)是一种非凡的椭圆(Ellipse),按理说类Circle应该可以从类Ellipse派生。可是椭圆有长轴和短轴,假如圆担任了椭圆的长轴和短轴,难道多此一举?

所以越发严格的担任法则该当是:若在逻辑上B是A的“一种”,而且A的所有成果和属性对B而言都有意义,则答允B担任A的成果和属性。

    关键字:

在线提交作业