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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

1分钟理清楚C++类模板和模板类区别

發(fā)布時(shí)間:2024/3/13 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1分钟理清楚C++类模板和模板类区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1、定義區(qū)別? ? ? ?

2、程序舉例


1、定義區(qū)別? ? ? ?

?????????類模板和模板主要關(guān)注點(diǎn)是后一個(gè)單詞。

????????類模板:主要描述的是模板,這個(gè)模板是類的模板。可以理解為一個(gè)通用的類,這個(gè)類中的數(shù)據(jù)成員,成員函數(shù)的形參類型以及成員函數(shù)的返回值類型不用具體的指定,這些類型都是虛擬的。在使用類模板進(jìn)行對(duì)象定義的時(shí)候,才會(huì)根據(jù)對(duì)象的實(shí)際參數(shù)類型來替代類模板中的虛擬類型。通俗一點(diǎn)來說,可以看作是做蛋糕的模具。類模板標(biāo)準(zhǔn)定義格式如下:

template <typename 類型參數(shù)> class 類名 {類成員聲明 };

?????????或者:

template <class 類型參數(shù)> class 類名 {類成員聲明 };

????????(1)template:這是聲明類模板的關(guān)鍵字,表明這是一個(gè)類模板。

????????(2)尖括號(hào)<>中,typename和class的作用都一樣,都是用作來申明后面的參數(shù)是一個(gè)虛擬的數(shù)據(jù)參數(shù)類型。

????????(3)類型參數(shù):用C++標(biāo)識(shí)符:Type或者T來表示,表示這是一個(gè)虛擬的數(shù)據(jù)類型名,此時(shí)在類模板中不給定具體的數(shù)據(jù)類型,實(shí)例化成模板類后,就需要給定具體的數(shù)據(jù)類型。

????????模板類:主要描述的是類,這個(gè)類使用類模板進(jìn)行聲明。將類模板中的虛擬類型參數(shù)指定成一個(gè)具體的數(shù)據(jù)類型參數(shù)。通俗一點(diǎn)來說可以看作是通過蛋糕模具做出來的蛋糕。


2、程序舉例

????????1,定義一個(gè)比較兩個(gè)元素大小的類模板;

????????2,使用該類模板進(jìn)行實(shí)例化,實(shí)現(xiàn)用模板類定義對(duì)象。

#include <iostream> using namespace std; template <class T> //聲明一個(gè)模板,虛擬數(shù)據(jù)類型名為T class Compare //類模板名為Compare {public :Compare(T a, T b){x = a;y = b;}T max( ) //類模板中的成員函數(shù){return (x > y) ? x : y;}private :T x;T y; };int main() { Compare<int>fun1(5,8); //用類模板定義對(duì)象fun1,此時(shí)T被int替代 Compare<float>fun2(9.1,9.7); //用類模板定義對(duì)象fun2,此時(shí)T被float替代 Compare<char>fun3('a','h'); //用類模板定義對(duì)象fun3,此時(shí)T被char替代 cout<<"最大值是:"<<fun1.max()<<endl; cout<<"最大值是:"<<fun2.max()<<endl; cout<<"最大值是:"<<fun3.max()<<endl; return 0; }

????????最終程序打印結(jié)果依次為:

最大值是:8 最大值是:9.7 最大值是:h

?????可以從程序舉例中看出使用類模板Compare進(jìn)行實(shí)例化,生成了3個(gè)類型分別為Compare<int>、Compare<float>、Compare<char>的模板類,這3個(gè)模板類經(jīng)實(shí)例化后又生成了3個(gè)對(duì)象成員fun1、fun2、fun3。對(duì)象成員可以調(diào)用類模板中定義的成員函數(shù)max()。類模板表示了通用的類,模板類表示了經(jīng)過實(shí)例化后帶具體數(shù)據(jù)類型參數(shù)的類。

????????另外,在類模板中,類模板的成員函數(shù)是在類模板體內(nèi)定義。而類模板中的成員函數(shù)也可以在類模板體外定義。那么就需要遵循以下規(guī)則:

????????(1)需要在成員函數(shù)定義之前進(jìn)行模板聲明;
????????(2)在成員函數(shù)名前加上"類名<類型參數(shù)>::";

????????之前的程序舉例中main函數(shù)之前的類模板聲明就要改為如下格式:

template<typename T> //聲明一個(gè)模板,虛擬數(shù)據(jù)類型名為T class Compare {public :Compare(T a, T b){x = a;y = b;}T max( ) //類模板中的成員函數(shù)private :T x;T y; };template<typename T> //在成員函數(shù)定義之前進(jìn)行模板聲明 T Compare<T>::max() //在成員函數(shù)名前加上"類名<類型參數(shù)>::" {return (x > y) ? x : y; }

↓↓↓更多技術(shù)內(nèi)容和書籍資料獲取敬請(qǐng)關(guān)注“明解嵌入式”↓↓↓

總結(jié)

以上是生活随笔為你收集整理的1分钟理清楚C++类模板和模板类区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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