函式引數可以設定乙個預設值,我們現在可以對類模板的型別引數設定乙個預設型別。
指定泛型stack的預設型別引數為 int
template
<
typename t =
int>
class
stack
;
當我們這樣定義乙個物件時:
stack<
> stack;
使用預設的方式,或者說隱式的方式,例項化了乙個stack物件。
這樣的好處是:指定預設型別之後,使用者就沒必要去寫了。
在模板字首中使用非型別引數。
例項化模板時,非型別實參應該是物件。
如下:
template
<
typename t,
int capacity>
class
stack
;stack<
char
,100
> charstack;
如同std裡面的array的初始化:std::array;
除了基本資料型別外,非型別實參是物件的時候是這樣的;
template
<
typename t, color c>
class
label
;color color(0
,0,255);
label<
char
,color> label;
注意,引數預設值必須是在最右邊,當然我們也可以全部定義乙個預設值,這樣就不會有問題了。
注意模板成員函式的宣告也需要進行修改。
就是這樣:
//泛型化
template
<
typename t =
char
,int n =
100>
//編寫stackofintegers類
class
stack
;public
:bool
empty()
; t peek()
; t push
(t value)
; t pop()
;int
getsize()
;stack()
;};template
<
typename t,
int n>
stack
::stack()
}
關於模板繼承的幾個原則:
1、普通類可從類模板例項繼承。乙個模板例項化之後就是乙個類了,類與類之間可以繼承。也就是說,乙個類是不可以從乙個模板繼承的,其他的三種組合方式都是可以的。2、模板可從普通類繼承
3、類模板可繼承類模板
使用別人寫好的模板庫時
對不同型別的資料做類似處理 (演算法、容器、遍歷等)
泛型程式設計在c++中廣泛使用,經常可以取代物件導向程式設計。
幾乎整個c++標準庫都依賴於泛型程式設計。
在c++標準庫較少使用繼承和執行時多型。異常、字串和io流中使用了較多的繼承。
C 模板 函式模板 類模板 模板與繼承
c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view plain copy include using namespace std int square int...
C 模板 函式模板 類模板 模板與繼承
2013 09 13 23 09 28054人閱讀收藏 舉報 c c stl 泛型程式設計 64 目錄 c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。1.支援不同資料型別的函式過載 cpp view p...
C 模板 函式模板 類模板 模板與繼承
原文 c 模板 描述 c 提供一種模板的機制來減少 重複。比如 對於同一樣函式使用不同的資料型別,int,double,char等。c 模板屬於 元程式設計 的範疇。c 模板函式 1.支援不同資料型別的函式過載 include using namespace std int square int x...