<b>高质量C++/C编程指南-第10章-类的担当与组合(1)</b>[VC/C++编程]
本文“<b>高质量C++/C编程指南-第10章-类的担当与组合(1)</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
对象(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的功效和属性.
以上是“<b>高质量C++/C编程指南-第10章-类的担当与组合(1)</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |