我們在定義函式時,可以通過定義函式模板,來簡化一些功能相同而資料型別不同的函式的定義和呼叫過程。
c++中的函式模板
對於類的宣告來說,也有同樣的問題。有時,有兩個或多個類,其功能是相同的,僅僅是資料型別不同,如下面語句宣告了乙個類:
class compare_int
int max()
int min()
float max()
float min()
t max()
t min()
t max()
t min()
//不能這樣定義類模板中的成員函式
而應當寫成類模板的形式:
templatet compare ::max()
第一行宣告類模板,第二行左端的t是虛擬型別名,後面的compare是乙個整體,是帶引數的類。表示所定義的 max函式是在類compare的作用域內的。
在定義物件時,使用者當然要指定實際的型別(圖int),進行編譯時就會將類模板中的虛擬型別名t全部用實際的型別代替。這樣compare就相當於乙個實際的類。
歸納一下使用時要注意的問題:
(1)在類宣告前面加入一行,格式為
template如:
template//注意本行末尾沒有分號
class compare
(2)用類模板定義物件時用以下形式:
類模板名 《實際型別名》 物件名;
類模板名 《實際型別名》 物件名(實參列表);
如:
compare cmp2(45.89,88.76);//定義物件cmp2,用於兩個浮點數的比較
(3)如果在類模板外定義成員函式,應寫成類模板形式:
template函式型別 類模板名 《虛擬型別引數》::成員函式名(函式形參表列)
(4)類模板的型別引數可以有乙個或者多個,每個型別前面都必須加class,如:
template class someclass
;
在定義物件時,分別帶入實際的型別名,如
someclassobj;
(5)和使用類一樣,使用類模板時要注意其作用域,只能在其有效作用域內用它定義物件。
如果類模板是在a檔案開頭定義的,則a檔案範圍內為有效作用域,可以在其中的任何地方使用類模板,但不能在b檔案中使用類模板定義物件。
(6)模板可以有層次,乙個類模板可以作為基類,派生出派生類。
C 中的函式模板
模板的意義 對型別也可以進行引數化了 template 定義乙個模板引數列表,typename也可以用class替換 bool compare t a,t b 特例化 template bool compare const char a,const char b bool compare const...
C 中的模板(函式模板,類模板)
1.模板是生成類或函式的框架,模板使用形參,當實際資料型別賦值給形參的時候,才由編譯器生成類或函式 2.函式模板的宣告由關鍵字template和包含乙個或多個資料型別形參的引數列表構成,形參資料型別 t 前面可以是class也可以是typename,型別形參t要用尖括號 括起來 template 或...
C 中的函式模板詳解
了解或熟悉c 的都,都對函式過載有一定的了解。c 中的函式過載就是指申明幾個功能類似的函式,但這些函式的引數型別或順序必須不同,即同乙個函式不同的運算功能。例如,比較a,b的大小,我們可以定義乙個max函式,對不同的型別有如下的版本 char max char a,char b int max in...