1分钟理清楚C++类模板和模板类区别
目錄
1、定義區(qū)別? ? ? ?
2、程序舉例
1、定義區(qū)別? ? ? ?
?????????類模板和模板類主要關(guān)注點是后一個單詞。
????????類模板:主要描述的是模板,這個模板是類的模板。可以理解為一個通用的類,這個類中的數(shù)據(jù)成員,成員函數(shù)的形參類型以及成員函數(shù)的返回值類型不用具體的指定,這些類型都是虛擬的。在使用類模板進行對象定義的時候,才會根據(jù)對象的實際參數(shù)類型來替代類模板中的虛擬類型。通俗一點來說,可以看作是做蛋糕的模具。類模板標準定義格式如下:
template <typename 類型參數(shù)> class 類名 {類成員聲明 };?????????或者:
template <class 類型參數(shù)> class 類名 {類成員聲明 };????????(1)template:這是聲明類模板的關(guān)鍵字,表明這是一個類模板。
????????(2)尖括號<>中,typename和class的作用都一樣,都是用作來申明后面的參數(shù)是一個虛擬的數(shù)據(jù)參數(shù)類型。
????????(3)類型參數(shù):用C++標識符:Type或者T來表示,表示這是一個虛擬的數(shù)據(jù)類型名,此時在類模板中不給定具體的數(shù)據(jù)類型,實例化成模板類后,就需要給定具體的數(shù)據(jù)類型。
????????模板類:主要描述的是類,這個類使用類模板進行聲明。將類模板中的虛擬類型參數(shù)指定成一個具體的數(shù)據(jù)類型參數(shù)。通俗一點來說可以看作是通過蛋糕模具做出來的蛋糕。
2、程序舉例
????????1,定義一個比較兩個元素大小的類模板;
????????2,使用該類模板進行實例化,實現(xiàn)用模板類定義對象。
#include <iostream> using namespace std; template <class T> //聲明一個模板,虛擬數(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); //用類模板定義對象fun1,此時T被int替代 Compare<float>fun2(9.1,9.7); //用類模板定義對象fun2,此時T被float替代 Compare<char>fun3('a','h'); //用類模板定義對象fun3,此時T被char替代 cout<<"最大值是:"<<fun1.max()<<endl; cout<<"最大值是:"<<fun2.max()<<endl; cout<<"最大值是:"<<fun3.max()<<endl; return 0; }????????最終程序打印結(jié)果依次為:
最大值是:8 最大值是:9.7 最大值是:h?????可以從程序舉例中看出使用類模板Compare進行實例化,生成了3個類型分別為Compare<int>、Compare<float>、Compare<char>的模板類,這3個模板類經(jīng)實例化后又生成了3個對象成員fun1、fun2、fun3。對象成員可以調(diào)用類模板中定義的成員函數(shù)max()。類模板表示了通用的類,模板類表示了經(jīng)過實例化后帶具體數(shù)據(jù)類型參數(shù)的類。
????????另外,在類模板中,類模板的成員函數(shù)是在類模板體內(nèi)定義。而類模板中的成員函數(shù)也可以在類模板體外定義。那么就需要遵循以下規(guī)則:
????????(1)需要在成員函數(shù)定義之前進行模板聲明;
????????(2)在成員函數(shù)名前加上"類名<類型參數(shù)>::";
????????之前的程序舉例中main函數(shù)之前的類模板聲明就要改為如下格式:
template<typename T> //聲明一個模板,虛擬數(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ù)定義之前進行模板聲明 T Compare<T>::max() //在成員函數(shù)名前加上"類名<類型參數(shù)>::" {return (x > y) ? x : y; }↓↓↓更多技術(shù)內(nèi)容和書籍資料獲取敬請關(guān)注“明解嵌入式”↓↓↓
總結(jié)
以上是生活随笔為你收集整理的1分钟理清楚C++类模板和模板类区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10 1809版本手动安装WSL和
- 下一篇: c++敢死队问题代码(为大一而生)