日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

第六章-template模板

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

第六章-template模板

文章目錄

  • 第六章-template模板
    • 函數(shù)模板
    • 類模板

函數(shù)模板

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

函數(shù)定義的一般形式:

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

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

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 */

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

如果調用 abs函數(shù)時傳入的參數(shù)為int,則運行時會生成一個int類型的實例函數(shù),如果傳入?yún)?shù)為double,則生成double類型的實例函數(shù)

細節(jié):

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

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

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

    類模板聲明的語法形式:

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

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

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

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

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

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

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

    總結

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

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