定義
我們知道函式的過載可以實現乙個函式名多用,將功能相同或者類似函式用同乙個名來定義。這樣可以簡化函式的呼叫形式,但是程式中,仍然需要分別定義每乙個函式。
c++提供的函式模板可以更加簡化這個過程。
所謂函式模板實際上是建立乙個通用函式,其涵涵素型別額形參型別不具體指定,用乙個虛擬的型別來代表,這個通用函式就稱為函式模板。
凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需要在模板中定義一次即可。在呼叫函式時,系統會根據實參的型別來取代模板中的虛擬型別,從而實現了不同函式的功能。
定義函式模板的一般形式為:
複製** **如下:
template
通用函式定義
或者複製** **如下:
template
通用函式定義
下面,我們來對比一下使用普通函式,使用函式的過載,以及使用函式的模板時的情況:
該段**用於解決不用的型別資料相加的問題
使用多個普通函式
**********===示例**1.1**********====
複製** **如下:
#include
using namespace std;
int int_add(int a,int b) kujfqp //定義函式int_add用於int型資料相加
double dou_add(double a,double b) //定義函式dou_add用於double型函式相加
int main()
使用建構函式
***************示例**1.2***************
複製** **如下:
#include
using namespace std;
int n_add(int a,int b) &nb //定義函式n_add用於int型資料相加
double n_add(double a,double b) //定義函式n_add用於double型函式相加
int main()
使用函式模板
***************示例**1.3***************====
複製** **如下:
#include
using namespace std;
template
t n_add(t a,t b)
int main()
分析:首先分析示例**1.1,該**根據不同的的資料(int和double兩種)相加,分別定義了兩個不同的函式int_add和dou_add,當不同型別的資料相加時,我們人工的設定使用對應的函式進行操作。
示例**1.2相比1.1而言,在函式的呼叫形式上進行了簡化,使用了函式的過載技術,對於所有的資料,統一使用函式n_add進行操作,編譯系統會根據資料的型別自動呼叫對應的函式。
示例**1.3相比1.2而言,則kujfqp有在函式體上進行了簡化,如果我們使用了函式模板,我們就沒有必要去一一書寫對應的函式,我們只需要構造相應的模板,然後系統會自動判斷資料的型別,然後替代對應的虛擬型別,
比如,當操作n_add(5.35,5.5)時,系統會自動判斷資料為doubl型,然後就會將函式模板中的t替換成double:
也就相當於構造了函式:
複製** **如下:
int n_add(int a,int b)
本文標題: c++中函式模板的用法詳細解析
本文位址:
C 中函式模板的用法詳細解析
所謂函式模板實際上是建立乙個通用函式,其涵涵素型別額形參型別不具體指定,用乙個虛擬的型別來代表,這個通用函式就稱為函式模板 定義 我們知道函式的過載可以實現乙個函式名多用,將功能相同或者類似函式用同乙個名來定義。這樣可以簡化函式的呼叫形式,但是程式中,仍然需要分別定義每乙個函式。c 提供的函式模板可...
C 中的函式模板
我們在定義函式時,可以通過定義函式模板,來簡化一些功能相同而資料型別不同的函式的定義和呼叫過程。c 中的函式模板 對於類的宣告來說,也有同樣的問題。有時,有兩個或多個類,其功能是相同的,僅僅是資料型別不同,如下面語句宣告了乙個類 class compare int int max int min f...
C 中的函式模板
模板的意義 對型別也可以進行引數化了 template 定義乙個模板引數列表,typename也可以用class替換 bool compare t a,t b 特例化 template bool compare const char a,const char b bool compare const...