C++在發展的后期增加了模板(template )的功能,提供了解決這類問題的途徑。可以聲明一個通用的類模板,它可以有一個或多個虛擬的類型參數。
比如:
class Compare_intclass Compare_float
都是比較大小的函數,只是參數類型不同,於是用一個類模版綜合成一個函數:
template <class numtype> //聲明一個模板,虛擬類型名為numtype class Compare //類模板名為Compare { public : Compare(numtype a,numtype b){ x=a;y=b; } numtype max( ){ return (x>y)?x:y; } numtype min( ){ return (x<y)?x:y; } private : numtype x,y; };
1. 用類模板定義對象時用以下形式:
類模板名<實際類型名> 對象名;
類模板名<實際類型名> 對象名(實參表列);
如:
Compare<int> cmp;
Compare<int> cmp(3,7);
2. 如果在類模板外定義成員函數,應寫成類模板形式:
template <class 虛擬類型參數>
函數類型 類模板名<虛擬類型參數>::成員函數名(函數形參表列) {…}
template <class numtype>
numtype Compare<numtype>::max( )
{
return (x>y)?x:y;
}
3. 類模板的類型參數可以有一個或多個,每個類型前面都必須加class,如:
template <class T1,class T2>
class someclass
{…};
在定義對象時分別代入實際的類型名,如:
someclass<int,double> obj;
