C++ 類别範本的寫法
在C++的Template中很多地方都用到了typename與class這兩個關鍵字,有時候這兩者可以替換,那麼這兩個關鍵字是否完全一樣呢?
事實上class用於定義類,在模板引入c++後,最初定義模板的方法為:template<class T>
,這裡class關鍵字表明T是一個型別,後來為了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同class一樣表明後面的符號為一個型別,這樣在定義模板的時候可以使用下面的方式了:
template<typename T>
在模板定義語法中關鍵字class與typename的作用完全一樣。
區分類别範本與模板類的概念
一個類别範本(類生成類)允許使用者為類定義個一種模式,使得類中的某些資料成員、預設成員函式的引數,某些成員函式的返回值,能夠取任意型別(包括系統預定義的和使用者自定義的)。
如果一個類中的資料成員的資料型別不能確定,或者是某個成員函式的引數或返回值的型別不能確定,就必須將此類宣告為模板,它的存在不是代表一個具體的、實際的類,而是代表一類類。
類别範本定義
定義一個類别範本,一般有兩方面的內容:
A。首先要定義一個類,其格式為:
template<class T>
class test
{
....
}
test為類名,在類定義體中,如果採用通用資料型別的成員,函式引數的前面需加上T,其中通用型別T可以作為普通成員變數的型別。還可以作為成員函式的引數和返回型別等。
例如:
1 template<class T>
3 class Test
4 {
5 private:
6 T n;
7 const T i;
8 public:
9 Test():i(0) {}
10 Test(T k);
11 ~Test(){}
12
13 void print();
14 T operator+(T x);
15 };
類别範本類外實現成員函式
如果在類外實現成員函式,若此成員函式中有模板引數存在,則除了需要和一般類的類外定義成員函式一樣的定義外,還需要在函式外進行模板宣告,並且類字首也要包含模板。
例如:
1 template<class T>
2 void Test<T>::print()
3 {
4 std::cout<<"n="<<n<<std::endl;
5 std::cout<<"i="<<i<<std::endl;
6 }
1 template<class T>
2 Test<T>::Test(T k):i(k){ n=k;}
3
4 template<class T>
5 T Test<T>::operator+(T x){
6 return n + x;
7 }
關於類别範本的使用:類别範本的使用實際上是將類别範本例項化成一個具體的類,它的格式為:類名<實際的型別>
模板類是類别範本例項化後的一個產物,說個具體點的例子吧,我們把類别範本比作是一個做餅乾的模子,而模板類就是用這個模子做出來的餅乾,至於這個餅乾是什麼味道的就要看你自己在例項化時用的是什麼材料了,你可以做巧克力餅乾,也可以做牛奶餅乾,這些餅乾出了材料不一樣外,其它的東西都是一樣的了。
類别範本的宣告
template <typename T>
class A;
類别範本的宣告同樣要加template。
相關文章
- 類别範本
- c++函式模板和類别範本C++函式
- 【C++】 59_類别範本深度剖析C++
- C++ 單例類别範本(詳解)C++單例
- 【C++】 61_智慧指標類别範本C++指標
- 陣列類别範本陣列
- C++知識點57——類别範本(2、類别範本的區域性特化與預設模板實參)C++
- 類别範本的常見用法
- 類别範本 單例模板單例
- 類别範本與繼承繼承
- 類别範本與友元
- pua 八股類别範本
- C++ Templates (2.2 使用Stack類别範本 Use of Class Template Stack )C++
- C++ Templates (2.1 類别範本Stack的實現 Implementation of Class Template Stack)C++
- C++ Templates (2.3 類别範本的區域性使用 Partial Usage of Class Templates)C++
- 隱藏在 SDK 中的單例類别範本單例
- 類别範本與函式模板的區別函式
- C++學習筆記 第59課類别範本深度刨析C++筆記
- 【C++ 泛型程式設計01:模板】函式模板與類别範本C++泛型程式設計函式
- 類别範本中成員函式建立時機函式
- 封裝不同類别範本的隨機數生成器封裝隨機
- c++11-17 模板核心知識(二)—— 類别範本C++
- 類别範本及其成員函式的定義及注意事項函式
- 【演算法學習】數學專題 有理數類别範本演算法
- 類别範本的簡單應用(用於儲存不同型別資料的類容器)型別
- 類别範本物件做函式引數物件函式
- VS2017 設定 類别範本引數推導(CTAD, Class Template Argument Deduction)
- 資料結構初階--單連結串列(講解+類别範本實現)資料結構
- 資料結構初階--棧和佇列(講解+類别範本實現)資料結構佇列
- 資料結構初階--雙向迴圈連結串列(講解+類别範本實現)資料結構
- SQL語句規範的寫法SQL
- 類的優雅寫法
- 資料庫規範之SQL規範寫法資料庫SQL
- 【C++】 68_拾遺: 令人迷惑的寫法C++
- fastadmin分類表單寫法AST
- 分享一個的c++寫的,模仿awk的框架類CAwkDocC++框架
- PHP入門:書寫語法以及基本規範PHP
- 驚喜!一個檔案多個【請求類】的另類寫法