天天看點

《C++程式設計風格(修訂版)》——3.6 模闆

本節書摘來自異步社群出版社《c++程式設計風格(修訂版)》一書中的第3章,第3.6節,作者:【美】tom cargill,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

c++程式設計風格(修訂版)

intstack和charstack的共同屬性可以用另一種不同的方式來表達,即c++的模闆機制。模闆也被稱之為參數化類型,在程式清單3.5中給出了堆棧的模闆。

程式清單3.5 stack模闆

《C++程式設計風格(修訂版)》——3.6 模闆
《C++程式設計風格(修訂版)》——3.6 模闆

stack模闆定義了一組類。在使用stack模闆來聲明一個對象時,必須同時提供一個類型來替換模闆聲明中的類型t。例如,

《C++程式設計風格(修訂版)》——3.6 模闆

在上面的語句中,聲明了一個對象stackofchar,這個對象是一個存儲10個char類型值的堆棧,而在下面的語句中:

《C++程式設計風格(修訂版)》——3.6 模闆

聲明了一個對象stackofint,這個對象是一個存儲20個int類型值的堆棧。函數push()中的參數類型和pop()的傳回類型也都是t。

将模闆增加到c++的主要推動力是因為模闆可以支援通用的集合類。我們不僅可以建立整數類型的堆棧和字元類型的堆棧,還可以建立浮點類型的堆棧、char指針類型的堆棧等。

用模闆來執行個體化的對象與那些使用intstack和charstack來執行個體化的對象在行為上隻存在細微的差别。在最初的charstack構造函數中,可以帶有第二個參數,用于指定将要壓入棧中的字元串。但在intstack的構造函數中并沒有這個參數。是以,如果使用模闆來同時表示這兩個類,那麼這個差别将無法表達出來。

繼續閱讀