14.12.3 组合与继承(再论)
确定应当用组合还是用继承,最清楚的方法之一是询问是否需要从新类向上类型转换。在本章的前面,Stack类通过继承被专门化,然而,StringStack对象仅作为string容器,不需向上类型转换,所以更合适的方法可能是组合:
这个文件与InheritStack.cpp是一样的,只不过Stack对象被嵌入在StringStack内,并且成员函数是由被嵌入对象调用的。这里没有时间和空间的开销,因为其子类占用相同量的空间,而且所有另外的类型检查是发生在编译时。
虽然这可能会变得更加复杂,但我们可以用private继承以表示“照此实现”,这也将很好地解决了这个问题。然而,一个重要的方面是确保多重继承。在这种情况下,如果发现一个程序中可以使用组合来代替继承,我们便可以消除对多重继承的需要。