類模闆的定義
即類采用模闆的形式出現,和函數模闆一樣,對參數沒有具體的執行個體化
template <class T> //聲明一個模闆,虛拟類型名為T。注意:這裡沒有分号。
class Compare //類模闆名為Compare
{
public :
Compare(T a,T b)
{
x=a;y=b;
}
T max( )
{
return (x>y)?x:y;
}
T min( )
{
return (x<y)?x:y;
}
private :
T x,y;
};
與普通類定義相比,類模闆有兩處不同:
1) 聲明類模闆時要增加一行
template <class 類型參數名>
template意思是“模闆”,是聲明類模闆時必須寫的關鍵字。在template後面的尖括号内的内容為模闆的參數表列,關鍵字class(也可以用typename)表示其後面的是類型參數。
2) 固定的類型名換成虛拟類型參數名T。
在建立類對象時,如果将實際類型指定為int型,編譯系統就會用int取代所有的T,如果指定為float型,就用float取代所有的T。這樣就能實作“一類多用”。
在類模闆外定義函數,不能用一般定義類成員函數的形式:
T Compare::max( ) {…} //不能這樣定義類模闆中的成員函數
而應當寫成類模闆的形式:
template <class T>
T Compare<T>::max()
{
return(x>y)? x : y;
}
類模闆的執行個體化
Compare <int> cmp(4, 7);
Compare <float> cmp(4.0, 7.0);
本文來源:https://blog.csdn.net/EmSoftEn/article/details/50421124
原文有一處錯誤
T compare 寫成 Tcompare