1、定義區別
類模板和模板類主要關注點是后一個單詞,
類模板:主要描述的是模板,這個模板是類的模板,可以理解為一個通用的類,這個類中的資料成員,成員函式的形參型別以及成員函式的回傳值型別不用具體的指定,這些型別都是虛擬的,在使用類模板進行物件定義的時候,才會根據物件的實際引數型別來替代類模板中的虛擬型別,通俗一點來說,可以看作是做蛋糕的模具,類模板標準定義格式如下:
1 template <typename 型別引數> 2 class 類名 3 { 4 類成員宣告 5 };
或者:
1 template <class 型別引數> 2 class 類名 3 { 4 類成員宣告 5 };
(1)template:這是宣告類模板的關鍵字,表明這是一個類模板,
(2)尖括號<>中,typename和class的作用都一樣,都是用作來申明后面的引數是一個虛擬的資料引數型別,
(3)型別引數:用C++識別符號:Type或者T來表示,表示這是一個虛擬的資料型別名,此時在類模板中不給定具體的資料型別,實體化成模板類后,就需要給定具體的資料型別,
模板類:主要描述的是類,這個類使用類模板進行宣告,將類模板中的虛擬型別引數指定成一個具體的資料型別引數,通俗一點來說可以看作是通過蛋糕模具做出來的蛋糕,
2、程式舉例
1,定義一個比較兩個元素大小的類模板;
2,使用該類模板進行實體化,實作用模板類定義物件,
1 #include <iostream> 2 using namespace std; 3 template <class T> //宣告一個模板,虛擬資料型別名為T 4 class Compare //類模板名為Compare 5 { 6 public : 7 Compare(T a, T b) 8 { 9 x = a; 10 y = b; 11 } 12 13 T max( ) //類模板中的成員函式 14 { 15 return (x > y) ? x : y; 16 } 17 18 private : 19 T x; 20 T y; 21 }; 22 23 int main() 24 { 25 Compare<int>fun1(5,8); //用類模板定義物件fun1,此時T被int替代 26 Compare<float>fun2(9.1,9.7); //用類模板定義物件fun2,此時T被float替代 27 Compare<char>fun3('a','h'); //用類模板定義物件fun3,此時T被char替代 28 cout<<"最大值是:"<<fun1.max()<<endl; 29 cout<<"最大值是:"<<fun2.max()<<endl; 30 cout<<"最大值是:"<<fun3.max()<<endl; 31 return 0; 32 }
最終程式列印結果依次為:
1 最大值是:8 2 最大值是:9.7 3 最大值是:h
可以從程式舉例中看出使用類模板Compare進行實體化,生成了3個型別分別為Compare<int>、Compare<float>、Compare<char>的模板類,這3個模板類經實體化后又生成了3個物件成員fun1、fun2、fun3,物件成員可以呼叫類模板中定義的成員函式max(),類模板表示了通用的類,模板類表示了經過實體化后帶具體資料型別引數的類,
另外,在類模板中,類模板的成員函式是在類模板體內定義,而類模板中的成員函式也可以在類模板體外定義,那么就需要遵循以下規則:
(1)需要在成員函式定義之前進行模板宣告;
(2)在成員函式名前加上"類名<型別引數>::";
之前的程式舉例中main函式之前的類模板宣告就要改為如下格式:
1 template<typename T> //宣告一個模板,虛擬資料型別名為T 2 class Compare 3 { 4 public : 5 Compare(T a, T b) 6 { 7 x = a; 8 y = b; 9 } 10 11 T max( ) //類模板中的成員函式 12 13 private : 14 T x; 15 T y; 16 }; 17 18 template<typename T> //在成員函式定義之前進行模板宣告 19 T Compare<T>::max() //在成員函式名前加上"類名<型別引數>::" 20 { 21 return (x > y) ? x : y; 22 }
更多技術內容和書籍資料獲取敬請關注微信公眾號“明解嵌入式”

本文來自博客園,作者:Sharemaker,轉載請注明原文鏈接:https://www.cnblogs.com/Sharemaker/p/16967748.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539587.html
標籤:C++
上一篇:爬蟲
下一篇:進位制數的靈活運用
