1分钟理清楚C++类模板和模板类区别
目錄
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10 1809版本手动安装WSL和
- 下一篇: s3c2440移植MQTT