早期的面向对象的语言smalltalk是经过继承来实现代码的重用,在作包容期器的时候,是经过“基于object的层次结构”来实现的,smalltalk中是单继承,object是树型的根,每个类都继承树上的一枝。可是在C++中支持多个无关联的层次结构,因此“基于object的层次结构”不能很好的起做用。经过多重继承能够实现,同时继承自无关联的类和object类能够实现,但是C++开始并不支持多重继承。spa
多重继承解决这个问题是直观的,不过却引入了实践的复杂度。另一种可取的方法是:包容器类被做为参数化类型的大型预处理宏。对象
在C++发明阶段,C++之父Stroustrup和贝尔实验室的C++小组对原先的宏方法进行了修改,对其进行了简化并将它从预处理移到了编译期。这种新的代码转换方法称为模板。模板对代码的重用方法不是经过继承和组合来对代码对象的重用。当用户使用模板时,参数由编译器进行替换,这就是模板的实例化,再也不只是一个类的描述,而是实例化成一个类。这个很像原来的宏处理,不过更清晰,更容易使用。
继承