從C到C++(模板函數)

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章