模板主要是針對資料型別,不同的資料型別卻具有相同的操作形式,比如說,同樣是做入棧,int
和double
由於資料型別不一樣,需要做兩個棧才能滿足需求,誠然可以使用函式過載,但是終歸棧的操作是一樣的,只是資料型別不一樣。所以在此基礎上,假設,我們首先將所有的資料型別視為乙個大類,將它引數化,等到要用的時候再去呼叫具體的型別,那麼可以大大減少**量,也使**更清晰。
模板——也就是由上面的問題所引出來的解決機制。將相類似的問題抽象出共同的結構,不同的地方用引數來表達。
模板的具體表達為:template
或template
。t
代表資料型別。
函式模板
函式模板——>函式模板例項
過載函式可以抽象成乙個模板,形同的操作保留,不同的操作(一般是資料型別)做成引數。
函式模板來定義排序或者輸出。
template
<
class
elementtype
>
void sortarray (elementtype b,
int len)
elementtype temp = b[i]
; b[i]
= b[min]
; b[min]
= temp;
}template
<
class
elementtype
>
void displayarray (elementtype b,
int len)
以上是將資料型別引數化為template
,例項化後可以具體實現具體資料型別的陣列的排序和輸出。
1.1 函式模板例項化
# define size 8
intmain()
;double af[size]=;
dispalyarray
(ai, size)
;sortarray
(ai, size)
;dispalyarray
(ai, size)
;dispalyarray
(af, size)
;sortarray
(af, size)
;dispalyarray
(af, size)
;return0;
}
具體實行是,mian
函式執行到dispalyarray(ai, size);
,將ai
替換為template 的所有 elementtype
型別。如果需要修改排序演算法,只需要修改模板裡的就可以了。
類模板
類模板——>類模板例項——>物件
#define default_elem_num 8
template
<
class
elementtype
>
class
stack
;int pop (elementtype &num)
;int push (elementtype num)
;private
: elementtype *data;
int memnum;
int size;};
template
<
class
elementtype
>
stack
::stack
(int s)
template
<
class
elementtype
>
int stack
::pop
(elementtype &num)
template
<
class
elementtype
>
int stack
::push
(elementtype mem)
2.1 類模板例項化和物件例項化
int
main()
while
(doublestack.
pop(f)
) cout << f <<'';
return
0;}
模板函式,模板類
使用模板函式 include stdafx.h include iostream include string using namespace std template template t add const t t1,const t t2 int tmain int argc,tchar arg...
函式模板,類模板
來自 函式模板 template t getmax t a,t b 呼叫 int i 5,j 6,k long l 10,m 5,n k getmax i,j n getmax l,m 也可以雙型別 template t getmin t a,u b return a呼叫 int i,j long ...
類模板,模板類和函式模板,模板函式
單整數類 雙整數類 所以c艹跟其他強型別語言為我們提供了乙個所謂模版功能 變數型別 整數 類模板的重點是模板。表示的是乙個模板,專門用於產生類的模子。例子 1 template 2 class vector 3 使用這個vector模板就可以產生很多的class 類 vector vector ve...