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),《物件》是定義該模板類的乙個物件。
使用類模板可以說明和定義任何型別的類。這種類被稱為引數化的類。如果說類是物件的推廣,那麼類模板可以說是類的推廣。
注意:類模板與模板類的區別。
乙個簡單的類模板程式
(求兩個任意型別數的和
)。
template
class a
;
template
a::a()
template
a::a(t _a,t _b)
template
t a::sum()
void main()
{ aai(3,4);
aad(3.1,4.0);
cout<
程式已經在vc6.0下除錯通過,以上**在乙個檔案中,別把類的宣告放在乙個.h中把實現放在.cpp中,類模板不支援分離只能是類的宣告和定義放在同乙個檔案中。
函式模板與類模板(模板類)
什麼是泛型程式設計?泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。模板分為函式模板和類模板 下面我們就來說說函式模板 函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的型別版本 格式 template 返回值型別 函式名 引數列表 templatet1 ...
模板 函式模板與類模板
模板 template 是乙個將資料型別引數化的工具。模板分為函式模板和類模板兩種。在定義模板的時候不說明某些函式引數或者資料成員的型別,而將它們的資料型別作為模板引數。在使用模板時根據實參的資料型別確定模板引數即資料型別,從而得到模板的乙個例項。函式模板 function template 函式模...
函式模板與類模板
函式模板與類模板有什麼區別?答 函式模板的例項化是由編譯程式在處理函式呼叫時自動完成的,而類模板的例項化 必 須由程式設計師在程式中顯式地指定。即函式模板允許隱式呼叫和顯式呼叫而類模板只能顯示呼叫 這期間有涉及到函式模板與模板函式,類模板與模板類的概念 類似於類與類物件的區 別 請看下面例子 注意 ...