函數(shù)模板
定義:
- 函數(shù)模板是那些被參數(shù)化的函數(shù),它們代表一個(gè)函數(shù)家族。該函數(shù)可以被多種不同的類(lèi)型調(diào)用。
//example:
template <typename T> //typename:也可以使用class代替
inline T const& max(T const& a,T const& b)
{
//尋找最大值
return a<b?b:a;
}
重載函數(shù)模板
- 重載:相同的函數(shù)名稱可以具有不同的函數(shù)定義
例如:
void display_num(int num);
void display_num(double num);
// 根據(jù)num的類(lèi)型自動(dòng)匹配最合適的函數(shù)
- 重載函數(shù)模板
例如:
//定義一個(gè)非函數(shù)模板函數(shù),求兩個(gè)int類(lèi)型的最大值
inline int const& max(int const& a,int const& b)
{
return a<b?b:a;
}
//函數(shù)模板函數(shù),求兩個(gè)任意類(lèi)型的最大值
template <typename T>
inline T const& max(T const& a,T const& b)
{
return a<b?b:a;
}
//求三個(gè)任意類(lèi)型的最大值
template <typename T>
inline T const& max(T const& a.T const& b,T const& c)
{
return ::max(::max(a,b),c);
}
int main()
{
::max(7,42,25);// 調(diào)用具有三個(gè)參數(shù)的模板
::max('a','k');//調(diào)用max<char>
::max(7,43); //未調(diào)用函數(shù)模板,調(diào)用的是int 重載的非模板函數(shù)
::max('a',22); //調(diào)用int重載的非模板函數(shù)
return 0;
}
以上程序定義了一個(gè)函數(shù)模板T const& max和一個(gè)重載函數(shù)int const& max.當(dāng)模板和重載沖突的時(shí)候 ,就優(yōu)先調(diào)用重載
函數(shù)模板只適用于函數(shù)的參數(shù)個(gè)數(shù)相同而類(lèi)型不同,且函數(shù)體相同的情況,如果參數(shù)的個(gè)數(shù)不同,則不能用函數(shù)模板,這就是函數(shù)模板相對(duì)于函數(shù)重載的缺陷。