详解C++函数模板
函數(shù)模板屬于類屬,能夠處理不同的數(shù)據(jù)類型,當(dāng)編譯器遇到函數(shù)調(diào)用是,將根據(jù)實(shí)際參數(shù)的類型產(chǎn)生特定的代碼,函數(shù)模板的定義形式是:
template <類型參數(shù)表> 返回值類型 函數(shù)名(形式參數(shù)表){ //函數(shù)體 }函數(shù)模板可以為我們提供很多方便
函數(shù)重載的例子: int square(int number){return number*number; }float square(float number){return number*number; }上述兩個(gè)函數(shù)之間的區(qū)別是參數(shù)類型和返回值類型不一樣,這種情況下我們使用函數(shù)模板更加方便。
通過(guò)函數(shù)模板實(shí)現(xiàn)square函數(shù)
只要寫一個(gè)函數(shù)定義就可以處理不同的數(shù)據(jù)類型,而不需要對(duì)每種數(shù)據(jù)類型都寫一個(gè)單獨(dú)的函數(shù)。
eg1:
注:①函數(shù)模板本身不占用內(nèi)存,當(dāng)編譯器遇到函數(shù)調(diào)用是,將在內(nèi)存中創(chuàng)建一個(gè)函數(shù)實(shí)例。②模板的定義必須放在函數(shù)調(diào)用之前,通常放在程序的開頭或者位于頭文件中。
具有多個(gè)參數(shù)的函數(shù)模板:
template <class T> void swapData(T &var1,T &var2){T temp;temp=var1;var1=var2;var2=temp; }函數(shù)模板不是一個(gè)真正意義上的函數(shù),它僅僅是一個(gè)函數(shù)模型,當(dāng)編譯器遇到函數(shù)調(diào)用是,將依據(jù)模板給出的代碼,通過(guò)檢驗(yàn)參數(shù)的數(shù)據(jù)類型,產(chǎn)生重載函數(shù)。
具有多種類型的函數(shù)模板
template <class T1,class T2> void swapData(T1 &var1,T2 &var2){T1 temp;temp=var1;var1=var2;var2=temp; }函數(shù)模板也支持重載
template <class T> T sum(T var1,T var2){return var1+var2; }template <class T> T sum(T var1,T var2,T var3){return var1+var2+var3; }當(dāng)程序中有一個(gè)普通的函數(shù)(非模板),同時(shí)定義了一個(gè)模板,只要他們的參數(shù)列表不同,他們也能作為重載函數(shù)的形式共存。
float sum(float var1,float var2){return var1+var2; }template <class T> T sum(T var1,T var2,T var3){return var1+var2+var3; } 這也屬于模板重載,當(dāng)程序執(zhí)行是,將根據(jù)實(shí)際調(diào)用的參數(shù)進(jìn)行區(qū)分。總結(jié)
- 上一篇: 松绿石多少钱一克啊?
- 下一篇: 全瓷牙一般多少钱啊?