C 類模板與模板類詳解

2021-09-10 22:00:10 字數 1245 閱讀 9881

在c++的template中很多地方都用到了typename與class這兩個關鍵字,有時候這兩者可以替換,那麼這兩個關鍵字是否完全一樣呢?

事實上class用於定義類,在模板引入c++後,最初定義模板的方法為:template,這裡class關鍵字表明t是乙個型別,後來為了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同class一樣表明後面的符號為乙個型別,這樣在定義模板的時候可以使用下面的方式了:

template.在模板定義語法中關鍵字class與typename的作用完全一樣

區分類模板與模板類的概念

乙個類模板(類生成類)允許使用者為類定義個一種模式,使得類中的某些資料成員、預設成員函式的引數,某些成員函式的返回值,能夠取任意型別(包括系統預定義的和使用者自定義的)。

如果乙個類中的資料成員的資料型別不能確定,或者是某個成員函式的引數或返回值的型別不能確定,就必須將此類宣告為模板,它的存在不是代表乙個具體的、實際的類,而是代表一類類。

類模板定義:

定義乙個類模板,一般有兩方面的內容:

a。首先要定義乙個類,其格式為:

template

class test

test為類名,在類定義體中,如果採用通用資料型別的成員,函式引數的前面需加上t,其中通用型別t可以作為普通成員變數的型別。還可以作為成員函式的引數和返回型別等。

例如:

1 template2 

3 class test

4 10 test(t k);

11 ~test(){}

12 13 void print();

14 t operator+(t x);

15 };

如果在類外定義成員函式,若此成員函式中有模板引數存在,則除了需要和一般類的類外定義成員函式一樣的定義外,還需要在函式外進行模板宣告

例如:

1 template2 void test::print()

3 3

4 template5 t test::operator+(t x)

關於類模板的使用:類模板的使用實際上是將類模板例項化成乙個具體的類,它的格式為:類名《實際的型別》

模板類是類模板例項化後的乙個產物,說個具體點的例子吧,我們把類模板比作是乙個做餅乾的模子,而模板類就是用這個模子做出來的餅乾,至於這個餅乾是什麼味道的就要看你自己在例項化時用的是什麼材料了,你可以做巧克力餅乾,也可以做牛奶餅乾,這些餅乾出了材料不一樣外,其它的東西都是一樣的了。

C 類模板與模板類詳解

在c 的template中很多地方都用到了typename與class這兩個關鍵字,有時候這兩者可以替換,那麼這兩個關鍵字是否完全一樣呢?事實上class用於定義類,在模板引入c 後,最初定義模板的方法為 template,這裡class關鍵字表明t是乙個型別,後來為了避免class在這兩個地方的使...

C 類模板與模板類詳解

在c 的template中很多地方都用到了typename與class這兩個關鍵字,有時候這兩者可以替換,那麼這兩個關鍵字是否完全一樣呢?事實上class用於定義類,在模板引入c 後,最初定義模板的方法為 template,這裡class關鍵字表明t是乙個型別,後來為了避免class在這兩個地方的使...

C 類模板(模板類)詳解

人們需要編寫多個形式和功能都相似的函式,因此有了函式模板來減少重複勞動 人們也需要編寫多個形式和功能都相似的類,於是 c 引人了類模板的概念,編譯器從類模板可以自動生成多個類,避免了程式設計師的重複勞動。例如,在 c 運算子過載 一章中的 c 實現可變長度的動態陣列 一節中,我們實現了乙個可變長的整...