模板(template)是乙個將資料型別引數化的工具。模板分為函式模板和類模板兩種。
在定義模板的時候不說明某些函式引數或者資料成員的型別,而將它們的資料型別作為模板引數。在使用模板時根據實參的資料型別確定模板引數即資料型別,從而得到模板的乙個例項。
函式模板(function template)
函式模板是一種不說明某些引數的資料型別的函式。例如,下面定義了乙個可對任何型別變數進行操作(求絕對值)的函式模板。
template //或寫成:template t abs(t val)
其中,模板定義以關鍵字template開頭,關鍵字class(或typename)表示其後的識別符號t是模板引數(型別引數),用來指定函式模板abs()中引數val的資料型別,隨後是函式模板abs()的定義。定義函式模板時,引數化的資料型別t可以用來宣告函式的引數和返回值,在函式體中還可以用來宣告工作變數。
函式模板被呼叫時,編譯器根據實際引數的型別確定模板引數t的型別,並自動生成乙個對應的函式。
函式模板的定義和使用例子如下。
#include template //或寫成:template t abs(t val)
void main()
void main()
//型別引數t用於宣告成員函式的引數
t getx() //型別引數t用於宣告成員函式的返回值
};
如果在模板類的外部定義模板類的成員函式,必須採用如下形式:
template //不能省略template模板宣告
mytemclass::setx(t a)
類模板通過使用類模板宣告物件時所給出的實際資料型別確定型別引數的資料型別。以下利用型別引數為int的類模板宣告了乙個物件intobject.
mytemclassintobject;
對於上面的物件宣告,編譯器首先用int替換類模板中的型別引數t,生成乙個所有資料型別已確定的類(模板類),然後再利用這個類宣告乙個物件。
定義類模板時同樣額可以使用多個型別引數,並且,類模板的型別引數可以含有已確定型別的引數,如下所示:
template //含有已確定型別int引數i
class mytemclass
;
這時,宣告類模板的物件應採用如下形式:
mytemclassmyobject;
使用多個型別引數的類模板的例子如下。
#include template //使用2個型別引數
class mytemclass //定義類模板
//建構函式
void showmax() //輸出最大的資料成員
函式模板與類模板(模板類)
什麼是泛型程式設計?泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。模板分為函式模板和類模板 下面我們就來說說函式模板 函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的型別版本 格式 template 返回值型別 函式名 引數列表 templatet1 ...
函式模板與類模板
c 提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。函式模板的一般說明形式如下 template 模板形參表 返回值型別 函式名 模板函式形參表 其中,模板形參表 可以包含基本資料型別...
函式模板與類模板
函式模板與類模板有什麼區別?答 函式模板的例項化是由編譯程式在處理函式呼叫時自動完成的,而類模板的例項化 必 須由程式設計師在程式中顯式地指定。即函式模板允許隱式呼叫和顯式呼叫而類模板只能顯示呼叫 這期間有涉及到函式模板與模板函式,類模板與模板類的概念 類似於類與類物件的區 別 請看下面例子 注意 ...