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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第六章-template模板

發布時間:2025/3/21 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第六章-template模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第六章-template模板

文章目錄

  • 第六章-template模板
    • 函數模板
    • 類模板

函數模板

函數模板可以用來創建一個通用功能的函數,以支持多種不同形參,進一步簡化重載函數的函數體設計

函數定義的一般形式:

template <模板參數表> 類型名 函數名(參數表) {函數體定義 }

模板參數表由用逗號分隔的模板參數構成,用 class 或者 typename來指明可以接受一個類型參數

template <typename T> //這里也可以寫成 template <class T> T abs(T x) {return x < 0 ? -x : x; } int main(){int n=-5;double m=-3.3;cout<<abs(n)<<endl;cout<<abs(m)<<endl;return 0; } /* 程序運行的結果為:53.3 */

類型參數的含義確定后,編譯器以函數模板為樣板,生成一個函數,這一過程稱為函數模板的實例化,該函數稱為函數模板的一個實例

如果調用 abs函數時傳入的參數為int,則運行時會生成一個int類型的實例函數,如果傳入參數為double,則生成double類型的實例函數

細節:

  • 函數模板在編譯時不會產生目標代碼,只有模板生成的實例才會產生目標代碼
  • 函數指針不能指向模板本身,只能指向模板的實例
  • 被多個源文件引用的函數模板,應該把函數體一起寫在頭文件中
  • 類模板

    使用類模板可以讓用戶定義類的一種模式,使類中某些數據成員、某些函數成員的參數、返回值或局部變量能取任意類型

    類模板需要一種或多種類型參數,因此也可以叫做參數化類

    類模板聲明的語法形式:

    template <模板參數表> class 類名 {類成員聲明} //模板參數表形式和函數模板的一樣 //類成員聲明方法和普通類的定義相同,只是它的各個成員可以使用模板類型中的參數T

    如果需要在類模板以外定義其成員函數,采用以下形式:

    template <模板參數表> 類型名 類名<模板參數標識符列表>::函數名(參數表)

    使用一個模板類來建立對象時,采用以下形式:

    模板名<模板參數表>對象名1,···,對象名N; template<class T> //類模板,實現對任意類型的數據進行存取 class Store{ public:Store(){haveValue=false; //默認為 false }T &getElem(); //提取數據函數 void putElem(T x); //存入數據函數 private:T item; //item用于存放任意類型的數據 bool haveValue; //haveValue用來判斷 item是否存取 };template<class T> T &Store<T>::getElem(){if(!haveValue){ //如果試圖提取未初始化的數據,則終止程序 cout<<"NO item present!"<<endl;exit(1);}return item; //提取成功,則返回item中存取的數據 }template<class T> void Store<T>::putElem(T x){item=x;haveValue=true; //表示item中已經存入數據 }int main(){Store<int>s1,s2; //定義兩個Store<int>對象 s1.putElem(3);s2.putElem(-7);cout<<s1.getElem()<<" "<<s2.getElem()<<endl;Store<double>s3,s4; //定義兩個Store<double>對象 s3.putElem(4.3);s4.putElem(-9.2);cout<<s3.getElem()<<" "<<s4.getElem()<<endl;Store<int>s5;cout<<s5.getElem()<<endl; //數據沒有初始化,進行異常處理 return 0; } /* 程序運行的結果為:3 -74.3 -9.2 NO item present! */

    一個類模板聲明自身并不是一個類,而是說明了類的一個家族。只有被其他代碼引用時,模板才根據引用的需要生成具體的類

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

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

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