背景:
在呼叫類模板時,指定引數,由編譯系統根據引數提供的資料型別自動產生相應的模板類
template
<
class 型別引數1
,class 型別引數2,.
..>
class 類模板名
;
template
《型別參數列》
返回值型別 類模板名《型別引數名列表》
::成員函式名(參數列)
類模板名 《真實型別參數列》 物件名(建構函式實際參數列)
;
如果類模板有無參建構函式,那麼也可以只寫為:
類模板名 《真實型別參數列》 物件名;
template
<
classt1,
class
t2>
class
pair
;//建構函式
bool
operator
<
(const pair
&p)const
;//運算子過載,其傳遞的函式是乙個pair型別的乙個指標的引用
//const說明只是取比較大小,而不改變原來的值};
template
<
classt1,
class
t2>
bool pair
::operator
<
(const pair
&p)const
intmain()
pairint>
*p;pairdouble
> a;
p =&a;
//wrong
#include
using
namespace std;
template
<
class
t>
class
a//成員函式模板};
intmain()
類模板的《型別參數列》
中可以出現非型別引數:
template
<
classt,
int size>
class
carray
};
通常而言,一共有四種方式:
下面我們分別對上述幾種方式結合例子加以說明:
template
<
classt1,
class
t2>
classa;
template
<
classt1,
class
t2>
classb:
public a
;template
<
class
t>
classc:
public b
;int
main()
在對b類進行例項化過程中,我們相當於呼叫了下述語句:
class
b<
int,
double
>
:public a<
double
,int
>
;class
a<
double
,int
>
;
template
<
classt1,
class
t2>
classa;
classb:
public a<
int,
double
>
;int
main()
此時,自動生成兩個模板類:
a<
int,
double
>
b<
char
>
classa;
template
<
class
t>
classb:
public a
;
template
<
class
t>
classa;
classb:
public a<
int>
;
C 泛型程式設計 (二)模板類
模板類也是模板,必須以關鍵字template開頭,後接模板形參表。template class 類名 上面提到的模板引數和模板的模板引數在下一節vector迭代器時再分析。一 模板引數 1 模板型別形參 型別形參由關鍵字class或typename後接說明符構成。在函式模板形參表中,二者含義相同。t...
C 泛型程式設計 模板
在學習c c 過程中,我們可能常用幾種函式,由於傳入的引數不同,需要進行不同的函式的編寫,在c語言中需要根據引數和功能的不同重新編寫新的函式,而在c 中有函式過載這樣的機制,一定程度上解決了問題,但是 過載的函式僅僅只是型別不同,的復用率比較低,只要有新型別出現時,就需要增加對應的函式 的可維護性比...
C 泛型程式設計(模板)
2.類模板 我們先來看乙個概念 泛型程式設計 使用模板,編寫和型別無關的 沒有模板之前,一些函式或者類,針對不同的型別需要寫很多重複的 函式 比如交換函式swap,假如傳入的資料型別不同,int,char,double。我們要實現不同的型別物件函式。類 比如我們像實現乙個資料結構棧stack,sta...