15.模板template函數:
例:求兩個變量的最小值
厭倦了對每種類型求最小值
#include <iostream>
using namespace std;
int minValue(int a, int b) //對於不同的類型變量的比較,需要定義新的不同類型的函數,但裏面的代碼是一樣的
{//return a<b?a:b
if (a < b) return a;
else return b;
}
double minValue(double a, double b)
{//return a<b?a:b
if (a < b) return a;
else return b;
}
int main() //使用了函數重載
{
int i = 3, j = 4;
cout << "min of " << i << " and " << j << " is " << minValue(i, j) << endl;
double x = 3.5, y = 10;
cout << "min of " << x << " and " << y << " is " << minValue(x, y) << endl;
}
//在C++中可以轉化成: 模板函數
#include <iostream>
using namespace std;
//可以對任何能比較大小(<)的類型使用該模板讓編譯器
//編譯器會自動生成一個針對該數據類型的具體函數
template<class TT> //template 是模板頭,class是定義類型的關鍵字,是一個類,TT是指泛指的類型名
TT minValue(TT a, TT b)
{//return a<b?a:b
if (a < b) return a;
else return b;
}
int main()
{
int i = 3, j = 4;
cout << "min of " << i << " and " << j << " is " << minValue(i, j) << endl; //編譯器會自動生成一個針對該數據類型的具體函數
double x = 3.5, y = 10;
cout << "min of " << x << " and " << y << " is " << minValue(x, y) << endl;
//但是,不同類型的怎麼辦?
//cout << "min of " << i << " and " << y << " is " << minValue(i, y) << endl; //i是int型,y是double型
}
//可以對任何能比較大小(<)的類型使用該模板讓編譯器
//自動生成一個針對該數據類型的具體函數
#include <iostream>
using namespace std;
template<class T1, class T2> //定義兩個不同的類型
T1 minValue(T1 a, T2 b)
{//return a<b?a:b
if (a < b) return a;
else return (T1)b; //強制轉化爲T1類型 //在這所有情況下都返回T1類型
}
int main()
{
int i = 3, j = 4;
cout << "min of " << i << " and " << j << " is " << minValue(i, j) << endl;
double x = 3.5, y = 10;
cout << "min of " << x << " and " << y << " is " << minValue(x, y) << endl;
//但是,不同類型的怎麼辦?
cout << "min of " << i << " and " << y << " is " << minValue(i, y) << endl;
}