C++中函數模板的用法具體解析。本站提示廣大學習愛好者:(C++中函數模板的用法具體解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中函數模板的用法具體解析正文
界說
我們曉得函數的重載可以完成一個函數名多用,將功效雷同或許相似函數用統一個名來界說。如許可以簡化函數的挪用情勢,然則法式中,依然須要分離界說每個函數。
C++供給的函數模板可以加倍簡化這個進程。
所謂函數模板現實上是樹立一個通用函數,其涵涵素類型額形參類型不詳細指定,用一個虛擬的類型來代表,這個通用函數就稱為函數模板。
但凡函數體雷同的函數都可以用這個模板來取代,不用界說多個函數,只須要在模板中界說一次便可。在挪用函數時,體系會依據實參的類型來代替模板中的虛擬類型,從而完成了分歧函數的功效。
界說函數模板的普通情勢為:
template <typename T>
通用函數界說
或許
template <class T>
通用函數界說
上面,我們來比較一下應用通俗函數,應用函數的重載,和應用函數的模板時的情形:
該段代碼用於處理不消的類型數據相加的成績
應用多個通俗函數
=============示例代碼1.1==============
#include<iostream>
using namespace std;
int int_add(int a,int b) //界說函數int_add用於int型數據相加
{
int c;
c=a+b;
return c;
}
double dou_add(double a,double b) //界說函數dou_add用於double型函數相加
{
double c;
c=a+b;
return c;
}
int main()
{
cout<<int_add(5,3)<<endl; //挪用int_add函數
cout<<dou_add(5.35,5.5)<<endl; //挪用dou_add函數
return 0;
}
應用結構函數
===============示例代碼1.2===============
#include<iostream>
using namespace std;
int n_add(int a,int b) //界說函數n_add用於int型數據相加
{
int c;
c=a+b;
return c;
}
double n_add(double a,double b) //界說函數n_add用於double型函數相加
{
double c;
c=a+b;
return c;
}
int main()
{
cout<<n_add(5,3)<<endl; //挪用n_add函數
cout<<n_add(5.35,5.5)<<endl; //挪用n_add函數
return 0;
}
應用函數模板
===============示例代碼1.3===================
#include<iostream>
using namespace std;
template<typename T>
T n_add(T a,T b)
{
T c;
c=a+b;
return c;
}
int main()
{
cout<<n_add(5,3)<<endl;
cout<<n_add(5.35,5.5)<<endl;
return 0;
}
剖析:起首剖析示例代碼1.1,該代碼依據分歧的的數據(int和double兩種)相加,分離界說了兩個分歧的函數int_add和dou_add,當分歧類型的數據相加時,我們人工的設定應用對應的函數停止操作。
示例代碼1.2比擬1.1而言,在函數的挪用情勢長進行了簡化,應用了函數的重載技巧,關於一切的數據,同一應用函數n_add停止操作,編譯體系會依據數據的類型主動挪用對應的函數。
示例代碼1.3比擬1.2而言,則有在函數體長進行了簡化,假如我們應用了函數模板,我們就沒有需要去逐個書寫對應的函數,我們只須要結構響應的模板,然後體系會主動斷定數據的類型,然後替換對應的虛擬類型,
好比,當操作n_add(5.35,5.5)時,體系會主動斷定數據為doubl型,然後就會將函數模板中的T調換成double:
也就相當於結構了函數:
int n_add(int a,int b)
{
int c;
c=a+b;
return c;
}