c++提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。
函式模板的一般說明形式如下:
template <模板形參表》
<返回值型別》 <函式名》(模板函式形參表)
其中,《模板形參表》可以包含基本資料型別,也可以包含類型別。型別形參需要加字首class。如果型別形參多於乙個,則每個型別形參都要使用class。《模板函式形參表》中的引數必須是惟一的,而且《函式定義體》中至少出現一次。
函式模板定義不是乙個實實在在的函式,編譯系統不為其產生任何執行**。該定義只是對函式的描述,表示它每次能單獨處理在型別形式參數列中說明的資料型別。
例1:編寫乙個對具有n個元素的陣列a[ ]求最小值的程式,要求將求最小值的函式設計成函式模板。
#include
template
t min(t a,int n)
void main()
;
double b=;
cout<<」a
陣列的最小值為:
」
<
cout<<」b
陣列的最小值為:
」
<
}
類模板與函式模板類似,它可以為各種不同的資料型別定義一種模板,在引用時使用不同的資料型別例項化該類模板,從而形成乙個類的集合。
類模板實際上是函式模板的推廣。可以用相同的類模板來組建任何型別的物件集合。在傳統c++中,可能有乙個浮點數類或者乙個整數類,如果使用類模板,可以定義乙個對兩者都適用的類number。
類模板說明
類模板說明的一般形式是:
template <型別形參表》
class <類名》
;
template <型別形參表》
<返回型別》 <類名》 <型別名錶》::<成員函式1>(形參表)
template <型別形參表》
<返回型別》 <類名》 <型別名錶》::<成員函式2>(形參表)
…
12.3.2使用類模板
與函式模板一樣,類模板不能直接使用,必須先例項化為相應的模板類,定義該模板類的物件後才能使用。
建立類模板後,可用下列方式建立類模板的例項:
《類名》 《型別實參表》 《物件表》;
其中,《型別實參表》應與該類模板中的《型別形參表》匹配。《型別實參表》是模板類(template class),《物件》是定義該模板類的乙個物件。
使用類模板可以說明和定義任何型別的類。這種類被稱為引數化的類。如果說類是物件的推廣,那麼類模板可以說是類的推廣。
注意:類模板與模板類的區別。
乙個簡單的類模板程式
(求兩個任意型別數的和
)。
templateclass a ;
template a::a()
templatea::a(t _a,t _b) templatet a::sum() void main() { aai(3,4); aad(3.1,4.0); cout<
程式已經在vc6.0下除錯通過,以上**在乙個檔案中,別把類的宣告放在乙個.h中把實現放在.cpp中,類模板不支援分離只能是類的宣告和定義放在同乙個檔案中。
類模板和模板類
所謂類模板,實際上是建立乙個通用類,其資料成員 成員函式的返回值型別和形參型別不具體指定,用乙個虛擬的型別來代表。使用類模板定義物件時,系統會實參的型別來取代類模板中虛擬型別從而實現了不同類的功能。定義乙個類模板與定義函式模板的格式類似,必須以關鍵字template開始,後面是尖括號括起來的模板引數...
C 模板類和類模板
用相同的類模板可以組建任何型別的物件集合。在傳統c 中,可能有乙個浮點數類或者乙個整數類,如果使用類模板,可以定義乙個對兩者都適用的類number。類模板說明 類模板說明的一般形式是 template 型別形參表 class 類名 template 型別形參表 返回型別 類名 型別名錶 成員函式1 ...
C 類模板和模板類
類模板的意義和函式模板的意義是一樣的。template 宣告乙個模板,虛擬型別名為t。注意 這裡沒有分號。class compare 類模板名為compare t max t min 不能這樣定義類模板中的成員函式而 應當寫成類模板的形式 template tcompare max compare ...