C 泛型程式設計(二) 類模板

2021-09-24 04:10:18 字數 2427 閱讀 7710

背景:

在呼叫類模板時,指定引數,由編譯系統根據引數提供的資料型別自動產生相應的模板類

template

<

class 型別引數1

,class 型別引數2,.

..>

class 類模板名

;

template

《型別參數列》

返回值型別 類模板名《型別引數名列表》

::成員函式名(參數列)

類模板名 《真實型別參數列》  物件名(建構函式實際參數列)

;

如果類模板有無參建構函式,那麼也可以只寫為:

類模板名 《真實型別參數列》 物件名;
template

<

classt1,

class

t2>

class

pair

;//建構函式

bool

operator

<

(const pair

&p)const

;//運算子過載,其傳遞的函式是乙個pair型別的乙個指標的引用

//const說明只是取比較大小,而不改變原來的值};

template

<

classt1,

class

t2>

bool pair

::operator

<

(const pair

&p)const

intmain()

pairint>

*p;pairdouble

> a;

p =&a;

//wrong

#include

using

namespace std;

template

<

class

t>

class

a//成員函式模板};

intmain()

類模板的《型別參數列》中可以出現非型別引數:

template

<

classt,

int size>

class

carray

};

通常而言,一共有四種方式:

下面我們分別對上述幾種方式結合例子加以說明:

template

<

classt1,

class

t2>

classa;

template

<

classt1,

class

t2>

classb:

public a

;template

<

class

t>

classc:

public b

;int

main()

在對b類進行例項化過程中,我們相當於呼叫了下述語句:

class

b<

int,

double

>

:public a<

double

,int

>

;class

a<

double

,int

>

;

template

<

classt1,

class

t2>

classa;

classb:

public a<

int,

double

>

;int

main()

此時,自動生成兩個模板類:

a<

int,

double

>

b<

char

>

classa;

template

<

class

t>

classb:

public a

;

template

<

class

t>

classa;

classb:

public a<

int>

;

C 泛型程式設計 (二)模板類

模板類也是模板,必須以關鍵字template開頭,後接模板形參表。template class 類名 上面提到的模板引數和模板的模板引數在下一節vector迭代器時再分析。一 模板引數 1 模板型別形參 型別形參由關鍵字class或typename後接說明符構成。在函式模板形參表中,二者含義相同。t...

C 泛型程式設計 模板

在學習c c 過程中,我們可能常用幾種函式,由於傳入的引數不同,需要進行不同的函式的編寫,在c語言中需要根據引數和功能的不同重新編寫新的函式,而在c 中有函式過載這樣的機制,一定程度上解決了問題,但是 過載的函式僅僅只是型別不同,的復用率比較低,只要有新型別出現時,就需要增加對應的函式 的可維護性比...

C 泛型程式設計(模板)

2.類模板 我們先來看乙個概念 泛型程式設計 使用模板,編寫和型別無關的 沒有模板之前,一些函式或者類,針對不同的型別需要寫很多重複的 函式 比如交換函式swap,假如傳入的資料型別不同,int,char,double。我們要實現不同的型別物件函式。類 比如我們像實現乙個資料結構棧stack,sta...