模板
模板(template)是一個(gè)將數據類(lèi)型參化的工具,它提供了一種將代碼與數據類(lèi)相脫離的機制,即代碼不受具體的數據類(lèi)型的影響。模板分為函數模板和類(lèi)模板兩種。
(1)函數模板
函數模板是一種不說(shuō)明某些參數的數據類(lèi)型的函數。例如,下面定義了一個(gè)可對任何類(lèi)型變量進(jìn)行操作(求絕對值)的函數模板。
template <class T> //或寫(xiě)成:template <typename T>T abs(T val){return val<0 ? -val : val;}
在函數模板被調用時(shí),編譯器根據實(shí)際參數的類(lèi)型確定模板參數T的類(lèi)型,并自動(dòng)生成一個(gè)對應的函數,即模板函數。模板參數的類(lèi)型不同,生成的模板函數也不同。
例 1 函數模板的定義和使用
#include <iostream.h>template <class T> //定義模板T abs(T val) //定義函數模板{return val<0 ? -val : val;}void main(){int i=100;cout <<abs(i)<<endl; //類(lèi)型參數T替換為intlong l=-12345L;cout <<abs(l)<<endl; //類(lèi)型參數T替換為longfloat f=-125.78F;cout <<abs(f)<<endl; //類(lèi)型參數T替換為float}
定義函數模板時(shí)也可以使用多個(gè)類(lèi)型參數,這時(shí)每個(gè)類(lèi)型參數前面都要加上關(guān)鍵字class或typename,其間用逗分隔,其形式如下所示。
template <class T1,class T2,class T3>
例 2 使用多個(gè)類(lèi)型參數的函數模板
#include <iostream.h>template <class T1,class T2>T1 Max(T1 x,T2 y){return x>y ? x: (T1)y;}void main(){int i=100;float f=-125.78F;cout <<Max(i,f)<<endl; //類(lèi)型參數T1替換為int,T2替換為float}
(2)類(lèi)模板
使用多個(gè)類(lèi)型參數的類(lèi)模板
#include <iostream.h>template <class T1,class T2> //使用2個(gè)類(lèi)型參數class MyTemClass //定義類(lèi)模板{private:T1 x;T2 y;public:MyTemClass(T1 a,T2 b) { x=a;y=b; } //構造函數void ShowMax() //輸出最大的數據成員{cout <<"MaxMember="<<(x>y?x:y)<<endl;}};void main(){int a=100;float b=123.45F;MyTemClass<int,float> mt(a,b); //聲明類(lèi)模板的對象mt.ShowMax();}
聯(lián)系客服