继承与组合混用

来源:互联网 发布:java web接口开发 编辑:程序博客网 时间:2024/05/17 22:21

继承与组合混用

我们知道,在一个类中可以用类对象作为数据成员,即子对象,实际上,对象成员的类型可以是本派生类的基类,也可以是另外一个已定义的类。在一个类中以另一个类的对象作为数据成员的,称为类的组合(composition)

类的组合和继承一样,是软件重用的重要方式。组合和继承都是有效地利用已有类的资源。但二者的概念和用法不同。通过继承建立了派生类与基类的关系,它是一种的关系,如白猫是猫黑人是人,派生类是基类的具体化实现,是基类中的一种。

 类的组合其实描述的就是在一个类里内嵌了其他类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。

如果在一个类中内嵌了其他类的对象,那么创建这个类的对象时,其中的内嵌对象也会被自动创建。因为内嵌对象是组合类的对象的一部分,所以在构造组合类的对象时不但要对基本数据类型的成员进行初始化,还要对内嵌对象成员进行初始化。

声明一个组合类的对象时,不仅它自身的构造函数会被调用,还会调用其内嵌对象的构造函数。那么,这些构造函数的调用是什么顺序呢?首先,根据前面说的初始化列表,按照内嵌对象在组合类的声明中出现的次序,依次调用内嵌对象的构造函数,然后再执行本类的构造函数的函数体。

 

    如果声明组合类的对象时没有指定对象的初始值的话,就会自动调用无形参的构造函数,构造内嵌对象时也会对应的调用内嵌对象的无形参的构造函数。析构函数的执行顺序与构造函数正好相反。

 转载:

http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/20/2510770.html   作者:VincentCZW

C++继承特性可以提高程序的可复用性。正因为继承太有用、太容易用,才要防止乱用继承。我们要给继承立一些使用规则:

  一、如果类和类毫不相关,不可以为了使的功能更多些而让继承的功能。

  不要觉得不吃白不吃,让一个好端端的健壮青年无缘无故地吃人参补身体。

  二、如果类有必要使用的功能,则要分两种情况考虑:

1          若在逻辑上一种a kind of ),则允许继承的功能。如男人(Man)是人(Human)的一种,男孩(Boy)是男人的一种。那么类Man 可以从类Human 派生,类Boy 可以从类Man 派生。

2)若在逻辑上一部分a part of),则不允许继承的功能,而是要用A和其它东西组合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head 应该由类EyeNoseMouthEar 组合而成,不是派生而成。

总结:  实际编程很容易不注意。因此引入设计模式的重要性就在此体现。

 

原创粉丝点击