我們知道C++中有函數重載這個概念,函數重載的功能就是把一個函數重寫多次使其可以具有多種類型的參數。簡單的來說就是用同一種函數名定義多個函數,這些函數的參數個數和參數類型不同。
利用函數模版就可以更簡單的來實現不同函數的參數需求。其實函數模版和函數重載是非常相似的 唯一的區別就是 函數重載需要寫多個函數,而函數模版只需要寫一個函數模版(特殊的函數)就可以在調用的時候匹配隨意類型的參數了!
舉個例子:
我們需要寫一個求最大值函數(max()):
max(int a,int b,int x){
if(a>b){x=a;
}else{x=b;
}
return x;
}
這樣我們就可以計算出 整型的(int)最大值了,但是又出現了另外的一個問題就是 如果是這樣聲明函數的話 我們就必須聲明多種類型的函數,也就是說這一種 int 類型的函數只適用於int型的數據才能起作用。如果是double long 等類型就不適用了。如下:
max(dobule a,ouble b,double x){
if(a>b){x=a;
}else{x=b;
}
return x;
}
當然我們可以定義多個函數來實現,但是這樣就會有太多的冗余代碼。所以我們就必須運用到函數模版來解決這個問題:
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
template <class T>
T max(T a,T b,T c){
if(a>b){
c=a;
}else
{
c=b;
}
return c;
}
int main(){
int i=0;
double d=0;
int x=1,y=2,z=0;
double q=1.1,w=2.2,e=0;
i=max(x,y,z);
d=max(q,w,e);
cout<<"i="<<i<<endl;
cout<<"d="<<d<<endl;
return 0;
}
這樣一來就可以解決同樣功能的函數處理不同類型的參數了!
大家將此例子敲完就可以理解 函數模版的意思了!我就不過多的解釋了。
總結一句話:“函數摸吧 就是使同意功能的函數適應不同 參數類型”
作者 白璐