日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

详解C++函数模板

發布時間:2023/12/1 c/c++ 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解C++函数模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數模板屬于類屬,能夠處理不同的數據類型,當編譯器遇到函數調用是,將根據實際參數的類型產生特定的代碼,函數模板的定義形式是:

template <類型參數表> 返回值類型 函數名(形式參數表){ //函數體 }

函數模板可以為我們提供很多方便

函數重載的例子: int square(int number){return number*number; }float square(float number){return number*number; }

上述兩個函數之間的區別是參數類型和返回值類型不一樣,這種情況下我們使用函數模板更加方便。
通過函數模板實現square函數

template <class T> T square(T number){return number*number; }

只要寫一個函數定義就可以處理不同的數據類型,而不需要對每種數據類型都寫一個單獨的函數。
eg1:

#include<iostream> using namespace std;template <class T> T square(T number){return number*number; } int main(){int userInt;float userFloat;cout.precision(5);cout<<"請輸入一個整數和一個浮點數:";cin>>userInt>>userFloat;cout<<"他們的平方分別是:";cout<<square(userInt)<<"和"<<square(userFloat)<<endl;return 0; }

注:①函數模板本身不占用內存,當編譯器遇到函數調用是,將在內存中創建一個函數實例。②模板的定義必須放在函數調用之前,通常放在程序的開頭或者位于頭文件中。

具有多個參數的函數模板:

template <class T> void swapData(T &var1,T &var2){T temp;temp=var1;var1=var2;var2=temp; }

函數模板不是一個真正意義上的函數,它僅僅是一個函數模型,當編譯器遇到函數調用是,將依據模板給出的代碼,通過檢驗參數的數據類型,產生重載函數。

具有多種類型的函數模板

template <class T1,class T2> void swapData(T1 &var1,T2 &var2){T1 temp;temp=var1;var1=var2;var2=temp; }

函數模板也支持重載

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; }

當程序中有一個普通的函數(非模板),同時定義了一個模板,只要他們的參數列表不同,他們也能作為重載函數的形式共存。

float sum(float var1,float var2){return var1+var2; }template <class T> T sum(T var1,T var2,T var3){return var1+var2+var3; } 這也屬于模板重載,當程序執行是,將根據實際調用的參數進行區分。

總結

以上是生活随笔為你收集整理的详解C++函数模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。