10.6 分清继承还是组合

    面向对象设计的难点在于类的设计,而不是对象的创建,就像工业生产中图纸是关键,有了图纸产品可以很容易地被制造出来。在程序设计中,如何处理类派生和类组合一直是个很让人觉得困惑的问题。

    前面已提及继承的重要性,它能使代码结构清晰,大大提高了程序的可复用性,因此,很多初学者容易犯的错误就是把继承当成灵丹妙药,不管适合与否便使用继承,其实,在面向对象的组织方面,不只有继承,还有对象组合以及聚合等,但就C++的实用性而言,本节先讨论继承与组合的关系。

    10.6.1 继承不是万金油

    如果两个类没有关联,仅仅是为了使一个类的功能更多而让其去继承另一个类,这种方法是不可行的。继承不是万金油,毫无意义的继承就像乱拉关系,会让条理有序的关系变得一团糟。从逻辑上说,继承是一种a kind of(AKO)或者说IS-A(“是一个”)的关系。汽车是车,因此,汽车类可以从普通的车类继承而来,轮子类就不能从汽车类继承来,轮子是汽车的一个部件,轮子可以作为汽车类的对象成员,这就是“组合”(Composition)。