在這個學期開始學習使用模板,當然模板早在大一期間就用到了一些,但是都是作為練習語法用的。這個學期中使用了大量的模板來進行類的設計與實現,具體的來說應該幾乎是這個學期的所有的c++**都是用的模板實現的吧。有些即使沒那麼大的使用模板價值,但是還是為了積累模板的經驗而硬使用了模板。寫了這麼多的模板後,也就是在上個星期才偶爾在乙個帖子裡看到預設模板引數這個概念,寫了那麼多的**了才知道這個概念感覺很羞愧啊,就去學習了學習。其實這個如果對照普通型別的預設變數來看待,其實也是不難理解的。
就像標題說的那樣:模板類支援預設模板引數、模板函式不支援預設模板引數,這裡的模板函式包括全域性函式與類成員函式兩種。
使用說明一:
//模板類的預設模板引數
templateclass myclass
myclass(){}
~myclass(){}
typea getvaluea()
typeb getvalueb();
//類成員函式模板
templatevoid memberfuntion(t tval)
主函式的呼叫:
myclass<> cls(1,2.0f); //因為已經是預設的模板引數了,所以可以不用在例項化類的時候宣告型別,但是尖括號是必須要有的
cout
執行的結果是:
使用說明二:
對於主函式還可以這麼呼叫:
myclassclsch('z','l'); //這裡主動宣告了類模板的引數型別,覆蓋了原有的預設模板引數型別
cout<
執行結果:
說明:"hello"的預設型別是常量指標(指向常量字串的指標),因為乙個字串是被當做是乙個常量對待的,儲存於常量區。
使用說明三:
//類成員函式模板
templatevoid memberfuntion(t tval)
{ cout<
更多請看c++標準勘誤:c++標準核心語言缺陷報告
模板 函式模板 類模板
模板主要是針對資料型別,不同的資料型別卻具有相同的操作形式,比如說,同樣是做入棧,int和double由於資料型別不一樣,需要做兩個棧才能滿足需求,誠然可以使用函式過載,但是終歸棧的操作是一樣的,只是資料型別不一樣。所以在此基礎上,假設,我們首先將所有的資料型別視為乙個大類,將它引數化,等到要用的時...
模板函式,模板類
使用模板函式 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 ...