天天看點

類模闆 C++快速入門45類模闆

類模闆

讓程式設計改變世界

Change the world by program

需要注意的地方

在建立模闆時,還可以用template <typename T>來代替template <class T>,它們的含義是一樣一樣的。

注意,template <class T>中的class并不意味着T隻能是一個類。

再強調一次,不要把函數模闆分成原型和實作兩個部分。

如果編譯器看不到模闆的完整代碼,它就無法正确地生成代碼。

所得到的出錯資訊從“不知所雲”到“胡說八道”什麼樣都有。

為了明确地表明swap()是一個函數模闆,還可以使用swap<int>(i1, i2)文法來調用這個函數。

這将明确地告訴編譯器它應該使用哪一種類型。

如果某個函數對所有資料類型都将進行同樣的處理,就應該把它編寫為一個模闆。

如果某個函數對不同的資料類型将進行不同的處理,就應該對它進行重載。

類模闆

類模闆與函數模闆非常相似:同樣是先由你編寫一個類的模闆,再由編譯器在你第一次使用這個模闆時生成實際代碼。

[codesyntax lang="cpp"]

template <class T>
class MyClass
{
    MyClass();
    void swap(T &a, T &b);
}      

[/codesyntax]

構造器的實作将是下面這樣:

[codesyntax lang="cpp"]

MyClass<T>::MyClass()
{
    // 初始化操作。
}      

[/codesyntax]

因為MyClass是一個類模闆,是以不能隻寫出MyClass::MyClass(),編譯器需要你在這裡給出一種與MyClass()配合使用的資料類型,必須在尖括号裡提供它。

因為沒有确定的資料類型可以提供,是以使用一個T作為占位符即可。

接下來的示例程式将使這一切更加明朗。

我們即将編寫一個基于模闆的棧。

棧是實際程式設計過程中一種非常有用的資料結構,它是一種資料存儲機制。

棧隻提供兩個函數:一個用來吧資料壓入棧的頂部,另一個用來從棧取出頂部元素(先進後出)

盡管無數次在耳邊徘徊,但沒有學習過彙編語言的魚油對于棧這個概念可能還是熟悉又陌生的。

盡管如此,我們還是時刻都在使用它們!

[kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.fishc.com/wp-content/uploads/2012/08/棧原理示範.swf" width="400" height="300" targetclass="flashmovie" wmode="transparent"]

類模闆 C++快速入門45類模闆

[/kml_flashembed]

[buy] 獲得所有教學視訊、課件、源代碼等資源打包 [/buy]

[Downlink href='http://urlxf.qq.com/?IR7Z3aY']視訊下載下傳[/Downlink]

[Downlink href='http://kuai.xunlei.com/d/LONXEXHLQYHG']備胎下載下傳[/Downlink]