第一部分 基礎(chǔ)

函數(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ù)重載的缺陷。

類(lèi)模板

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容