早期的面向對象的語言smalltalk是經過繼承來實現代碼的重用,在作包容期器的時候,是經過「基於object的層次結構」來實現的,smalltalk中是單繼承,object是樹型的根,每個類都繼承樹上的一枝。可是在C++中支持多個無關聯的層次結構,因此「基於object的層次結構」不能很好的起做用。經過多重繼承能夠實現,同時繼承自無關聯的類和object類能夠實現,但是C++開始並不支持多重繼承。spa
多重繼承解決這個問題是直觀的,不過卻引入了實踐的複雜度。另一種可取的方法是:包容器類被做爲參數化類型的大型預處理宏。對象
在C++發明階段,C++之父Stroustrup和貝爾實驗室的C++小組對原先的宏方法進行了修改,對其進行了簡化並將它從預處理移到了編譯期。這種新的代碼轉換方法稱爲模板。模板對代碼的重用方法不是經過繼承和組合來對代碼對象的重用。當用戶使用模板時,參數由編譯器進行替換,這就是模板的實例化,再也不只是一個類的描述,而是實例化成一個類。這個很像原來的宏處理,不過更清晰,更容易使用。
繼承