C 中的函式模板

2021-09-08 16:55:10 字數 1338 閱讀 5907

我們在定義函式時,可以通過定義函式模板,來簡化一些功能相同而資料型別不同的函式的定義和呼叫過程。

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...