函式模板與類模板

2021-05-23 06:31:44 字數 2841 閱讀 1544

c++提供的函式模板可以定義乙個對任何型別變數進行操作的函式,從而大大增強了函式設計的通用性。使用函式模板的方法是先說明函式模板,然後例項化成相應的模板函式進行呼叫執行。

函式模板的一般說明形式如下:

template <模板形參表》

<返回值型別》 <函式名》(模板函式形參表)

其中,《模板形參表》可以包含基本資料型別,也可以包含類型別。型別形參需要加字首class。如果型別形參多於乙個,則每個型別形參都要使用class。《模板函式形參表》中的引數必須是惟一的,而且《函式定義體》中至少出現一次。

函式模板定義不是乙個實實在在的函式,編譯系統不為其產生任何執行**。該定義只是對函式的描述,表示它每次能單獨處理在型別形式參數列中說明的資料型別。

例1:編寫乙個對具有n個元素的陣列a[ ]求最小值的程式,要求將求最小值的函式設計成函式模板

#include

template

t min(t a,int n)

void main()

;

double b=;

cout<<」a

陣列的最小值為:

<

cout<<」b

陣列的最小值為:

<

}

類模板與函式模板類似,它可以為各種不同的資料型別定義一種模板,在引用時使用不同的資料型別例項化該類模板,從而形成乙個類的集合。

類模板實際上是函式模板的推廣。可以用相同的類模板來組建任何型別的物件集合。在傳統c++中,可能有乙個浮點數類或者乙個整數類,如果使用類模板,可以定義乙個對兩者都適用的類number。

類模板說明

類模板說明的一般形式是:

template  <型別形參表》

class  <類名》

template  <型別形參表》

<返回型別》 <類名》 <型別名錶》::<成員函式1>(形參表)

template  <型別形參表》

<返回型別》 <類名》 <型別名錶》::<成員函式2>(形參表)

12.3.2使用類模板

與函式模板一樣,類模板不能直接使用,必須先例項化為相應的模板類,定義該模板類的物件後才能使用。

建立類模板後,可用下列方式建立類模板的例項:

《類名》 《型別實參表》 《物件表》;

其中,《型別實參表》應與該類模板中的《型別形參表》匹配。《型別實參表》是模板類(template class),《物件》是定義該模板類的乙個物件。

使用類模板可以說明和定義任何型別的類。這種類被稱為引數化的類。如果說類是物件的推廣,那麼類模板可以說是類的推廣。

注意:類模板與模板類的區別。

乙個簡單的類模板程式

(求兩個任意型別數的和

)

template

class a

;

template

a::a()

template

a::a(t _a,t _b)

template

t a::sum()

void main()

{ aai(3,4);

aad(3.1,4.0);

cout<

程式已經在vc6.0下除錯通過,以上**在乙個檔案中,別把類的宣告放在乙個.h中把實現放在.cpp中,類模板不支援分離只能是類的宣告和定義放在同乙個檔案中。

函式模板與類模板(模板類)

什麼是泛型程式設計?泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。模板分為函式模板和類模板 下面我們就來說說函式模板 函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的型別版本 格式 template 返回值型別 函式名 引數列表 templatet1 ...

模板 函式模板與類模板

模板 template 是乙個將資料型別引數化的工具。模板分為函式模板和類模板兩種。在定義模板的時候不說明某些函式引數或者資料成員的型別,而將它們的資料型別作為模板引數。在使用模板時根據實參的資料型別確定模板引數即資料型別,從而得到模板的乙個例項。函式模板 function template 函式模...

函式模板與類模板

函式模板與類模板有什麼區別?答 函式模板的例項化是由編譯程式在處理函式呼叫時自動完成的,而類模板的例項化 必 須由程式設計師在程式中顯式地指定。即函式模板允許隱式呼叫和顯式呼叫而類模板只能顯示呼叫 這期間有涉及到函式模板與模板函式,類模板與模板類的概念 類似於類與類物件的區 別 請看下面例子 注意 ...