1、和重載相比 ,模板函數的優勢在於,它不需要重複定義,所以函數模板比函數重載更簡潔。但是,函數模板只適用於函數的參數個數相同而類型不同,而且函數體相同的情況。如果參數的個數不同,則不能用函數模板,這就是函數模板相對於函數重載的缺陷。
2、當調用環境同時滿足模板函數的條件和重載的條件,則先調用重載函數
#include <iostream>
using namespace std;
//C++函數模版兩種定義方式
//template < typename T> 或 template <class T>
template <typename T1>
T1 check_max(T1 x, T1 y);
//C++重載
int check_max(int x, int y);
int main(void)
{
int x = 33;
int y = 44;
long l1 = 333, l2 = 444;
float f1 = 3.14, f2 = 3.15926;
//系統會優先調用重載函數,而不是模板函數
cout << "max(x, y) = " << check_max(x, y) << endl;
//系統會自動識別類型 T1爲long類型
cout << "max(x, y) = " << check_max(l1, l2) << endl;
//系統會自動識別類型 T1爲float類型
cout << "max(x, y) = " << check_max(f1, f2) << endl;
cout << "==========================================" << endl;
cin.get();
return 0;
}
template <typename T1>
T1 check_max(T1 x, T1 y)
{
cout << "調用模板函數打印" << endl;
return x > y ? x : y;
}
int check_max(int x, int y)
{
cout << "調用重載函數打印" << endl;
return x > y ? x : y;
}