類模板與模板類

2021-05-25 11:21:58 字數 1786 閱讀 5544

**

1.類模板與模板類的概念

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

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

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

首先要定義類,其格式為:

template

class foo

foo

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

template

class test

test(

tk);

~test(){}

void print(); t

operator+(

tx); };

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

template

void test

::print()

如果函式是以通用型別為返回型別,則要在函式名前的類名字尾上「 」。例如:

template>

test

::test(

tk):i(k)

template t

test

::operator+

(tx) c.

在類定義體外初始化const 成員和static 成員變數的做法和普通類體外初始化const 成員和static 成員變數的做法基本上是一樣的,唯一的區別是需在對模板進行宣告,例如

template

int test

::cnt=0;

template

test<

t>::test(tk)

:i(k)

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

模 板類是類模板例項化後的乙個產物。說個形象點的例子吧。我把類模板比作乙個做餅乾同的模子,而模板類就是用這個模子做出來的餅乾,至於這個餅乾是什麼味道 的就要看你自己在例項化時用的是什麼材料了,你可以做巧克力餅乾,也可以做豆沙餅幹,這些餅乾的除了材料不一樣外,其他的東西都是一樣的了。 2.

類模板的派生

可以從類模板派生出新的類,既可以派生類模板,也可以派生非模板類。派生方法:

⑴ 從類模板派生類模板可以從類模板派生出新的類模板,它的派生格式如下例所示:

template

class base ;

template

class derive:public base ;

與一般的類派生定義相似,只是在指出它的基類時要綴上模板引數,即base 。

⑵ 從類模板派生非模板類 可以從類模板派生出非模板類,在派生中,作為非模板類的基類,必須是類模板例項化後的模板類,並且在定義派生類前不需要模板宣告語句:template 。例如:

template

class base ;

class derive:public base ;

在定義derive 類時,base 已例項化成了int 型的模板類。

類模板與模板類

類模板 就是設計類的一種框架,可以適用於不同的資料型別,是類的抽象。利用類模板可以針對不同的資料型別定義出具有共性的一組類。定義 template 型別形參列表 class 類模板名 其中型別引數列表與函式模板形式相同,如 定義類模板時應注意以下幾點 要是用關鍵字template 型別形參列表可以包...

C 類模板與模板類

6.3 類模板和模板類 所謂類模板,實際上是建立乙個通用類,其資料成員 成員函式的返回值型別和形參型別不具體指定,用乙個虛擬的型別來代表。使用類模板定義物件時,系統會實參的型別來取代類模板中虛擬型別從而實現了不同類的功能。定義乙個類模板與定義函式模板的格式類似,必須以關鍵字template開始,後面...

函式模板與類模板(模板類)

什麼是泛型程式設計?泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。模板分為函式模板和類模板 下面我們就來說說函式模板 函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的型別版本 格式 template 返回值型別 函式名 引數列表 templatet1 ...