模板是c++的高階特性,分為函式模板和類模板。
使用模板能夠快速建立裡具有型別安全的類庫集合和函式集合。
關於類模板的學習————》c++類模板
本文主要介紹函式模板。
函式模板不是乙個實在的函式,編譯器不能為其生成可執行**。定義函式模板最後只是乙個對函式功能框架的描述,當它具體執行時,將根據傳遞的實際引數決定功能。
template
引數型別及參 返回型別 函式名(形式引數)
也可以宣告函式模板分成template部分和函式部分:
template
引數類
返回型別 函式名(形式引數)
template為關鍵字,表示定義乙個模板。
<>表示模板引數,模板引數有兩種,是模板型別引數、模板非型別引數。模板型別引數使用關鍵字class或typedef開始,後面跟乙個合法型別名。模板非型別引數與普通引數定義相同,通常是乙個常數。可以不使用模板非型別引數。
下面將以求和函式為例解釋函式模板的使用
源**:
#include
using
namespace std;
//定義求和函式模板
template
<
class
type
>type sum
(type x,type y)
intmain()
結果圖:
首先是宣告乙個模板template < class type >
然後是定義函式模板的具體實現方法type sum(type x,type y)
單獨觀察具體實現方法,我們很容易聯想到普通的自定義函式。
//函式模板 //自定義函式
type sum
(type x,type y)
//}
相比之下,模板函式在宣告型別的情況下可以實現各種運算,而自定義函式只能實現單純的int運算。
所以,定義函式模板的優點就是適應各種型別物件的計算及輸入輸出。
最後就是函式模板的呼叫s1=sum< int >(a,b);s2=sum< double >(a2,b2);
< int >、< double >就是使用模板的方式,即模板型別。若除去<>,就變成了s1=sum(a,b);s2=sum(a2,b2);跟自定義函式的使用方法相同。
使用陣列作為模板引數,分別輸出int陣列、double陣列的最大值
源**:
#include
using
namespace std;
template
<
class
type
,int len>type max
(type a)
return m;
}int
main()
;double y[5]
=;int max1=max<
int,
5>
(x);
double max2=max<
double,5
>
(y);
cout<
cout<
return0;
}
結果圖:
這樣int、double的混合應用就凸顯了函式模板的優點,適應各種型別物件。
另外,與加法函式不同的是,在定義求最大值函式模板template 同時使用到了模板型別引數type和模板非型別引數len。
c 函式模板
include using namespace std template t max t a,t b,t c int main int main int i1 185,i2 76,i3 567,i double d1 56.63,d2 90.23,d3 3214.78,d long g1 67854...
c 函式模板
關鍵字template總是放在模板的電腦關於與宣告的最前面,關鍵字後面是用逗號分隔的模板參數列,該列表是模板參數列,不能為空。模板引數可以是乙個模板型別引數,它代表了一種型別 也可以是乙個模板非型別引數,它代表了乙個常量表示式。模板型別引數由關鍵字class或typename後加乙個識別符號構成。在...
C 函式模板
c 提供了函式模板 function template 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別...