C 中函式模板的用法詳細解析

2022-09-28 01:39:12 字數 1781 閱讀 6810

定義

我們知道函式的過載可以實現乙個函式名多用,將功能相同或者類似函式用同乙個名來定義。這樣可以簡化函式的呼叫形式,但是程式中,仍然需要分別定義每乙個函式。

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