【C++】類模板(template)作用對比舉例
阿新 • • 發佈:2019-02-19
一、類模板(template)
類模板是後期C++加入的一種可以大大提高程式設計效率的方法
關鍵字template
用法:
template <模板引數表> ----->模板引數表一般格式為class (識別符號)
class (類名)
{
//....
}
二、舉個栗子
我們要寫一個比較類,類裡面有兩個私有成員
在類裡有求私有成員中的最大值和最小值的兩個公有成員
用來判斷兩個數的大小
下面我們來進行有無類模板的比較
(1)不用類模板
程式碼塊:
class Compare { public: Compare(int a,int b)//建構函式,用於初始化 { x = a; y = b; } int max()//求較大值 { return (x>y)?x:y; } int min()//求較小值 { return (x<y)?x:y; } private: int x; int y; };
分析:
我們會發現,這個類只能用於比較整形的大小
比如3,5;呼叫max返回5,呼叫min返回3
但是如果比較的是浮點數,那就不可以了
(2)用類模板
程式碼塊:
template <class Type> class compare { public: compare(Type a,Type b) { x = a; y = b; } Type max() { return (x>y)?x:y; } Type min() { return (x<y)?x:y; } private: Type x; Type y; };
分析:
通過對比發現,這兩塊程式碼差別並不是很大,僅僅是增加了關鍵字
還有型別Type替換之前的整型int
在main函式定義時,就可以定義不同型別的物件了
main函式程式碼:
int main(void) { compare<int> C1(3,5); cout<<"最大值:"<<C1.max()<<endl; cout<<"最小值:"<<C1.min()<<endl; compare<float> C2(3.5,3.6); cout<<"最大值:"<<C2.max()<<endl; cout<<"最小值:"<<C2.min()<<endl; compare<char> C3('a','d'); cout<<"最大值:"<<C3.max()<<endl; cout<<"最小值:"<<C3.min()<<endl; return 0; }
執行結果:
三、如何寫一個將一個類轉化為類模板
(1)寫出一個類
(2)將型別需要改變的地方進行替換(如上面的Type)
(3)在類的前面加入關鍵字template以及函式引數表
(4)定義物件的格式 類名+<Type>+ xx(引數)
比如上面的compare<int> C1(3,5);
(5)切記,模板函式如果定義在類體外,需要在前面加上一行template <函式引數表>。並在類模板名後面用尖括號加上<虛擬函式引數>
比如
template<class Type>
Type compare <Type>::max()
{
//.....
}