如同函式模板一樣,使用類模板使使用者可以為類定義一種模式,使得類中的某些資料成員、某些成員函式的引數、某些成員函式的返回值能取任意型別。類模板是對一批僅僅成員資料型別不同的類的抽象,程式設計師只要為這一批類所組成的整個類家族建立乙個類模板,給出一套程式**,就可以用來生成多種具體的類,(這類可以看作是類模板的例項),從而大大提高程式設計的效率。
定義類模板的一般形式是:
template 《型別名 引數名1,型別名引數名2,…>
class 類名
;例如,template
class smemory
表示定義乙個名為smemory的類模板,其中帶型別引數t。
在類模板的外部定義類成員函式的一般形式是:
template 《型別名 引數名1,型別名引數名2,…>
函式返回值型別 類名《引數名 1 引數名 2,…>::成員函式名(形參表)
例如:template
void smemory::mput(t x)
表示定義乙個類模板smemory的成員函式,函式名為mput,形參x的型別是t,函式無返回值。
類模板是乙個類家族的抽象,它只是對類的描述,編譯程式不為類模板(包括成員函式定義)建立程式**,但是通過對類模板的例項化可以生成乙個具體的類以及該具體類的物件。
與函式模板不同的是:函式模板的例項化是由編譯程式在處理函式呼叫時自動完成的,而類模板的例項化必須由程式設計師在程式中顯式地指定,
其實例化的一般形式是:
類名 《資料型別 1(或資料),資料型別 2(或資料)…> 物件名
例如,smemorymol;
表示將類模板smemory的型別引數t全部替換成int 型,從而建立乙個具體的類,並生成該具體類的乙個物件mol。
下面舉例說明類模板的定義和使用方法。說明:類模板smemory帶乙個型別引數t,t是代表資料型別的引數,在型別引數前面必須加關鍵字class,用class表示型別引數的型別。在例項化時,對應型別引數t必須是具體的資料型別名,這裡建立第乙個物件時資料型別名是int,表示將類模板smemory中的所有型別引數t都替換成int型, 從而建立乙個具體的類及其物件mo1;在建立第二個物件時資料型別名是char,表示將模板smemory中的所有型別引數t都替換成char,從而建立乙個具體的類及其物件mo2。例9.3.1:類模板的定義和使用。
#include#include
const int size=8;
template
class smemory
void mput(t x); //mput()函式的引數x的型別是t
t mget( ); //宣告返回值型別為t的成員函式mget()
};template
void smemory::mput(t x) //定義成員函式mput(),函式的引數型別為t,該函式用於為資料成員 data陣列的各個元素賦值
data[count]=x;
count++;
}template
t smemory::mget( ) //定義成員函式mget(),函式的返回型別為t,該函式用於取出資料成員 data陣列的各個元素
count--;
return data[count];
}void main( )
cout< ";
for(i=0;i<8;i++)
cout< ";
for(i=0;i<8;i++)
cout< 76543210
get mo2=> hgfedcba
htm
類模板的定義和使用
如同函式模板一樣,使用類模板使使用者可以為類定義一種模式,使得類中的某些資料成員 某些成員函式的引數 某些成員函式的返回值能取任意型別。類模板是對一批僅僅成員資料型別不同的類的抽象,程式設計師只要為這一批類所組成的整個類家族建立乙個類模板,給出一套程式 就可以用來生成多種具體的類,這類可以看作是類模...
類模板的定義和使用
1.編寫程式,定義排序函式sort的模板,在主函式中呼叫該模板函式分別對整型陣列 float型陣列進行排序。include include include include using namespace std template typename t void sort t a,int n sort...
函式模板和類模板的定義和使用
模板是泛型程式設計的基礎。所謂泛型程式設計就是編寫與型別無關的邏輯 是一種復用的方式。模板分為函式模板和類模板。函式模板 建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表,這個通用函式就稱為函式模板。一般形式 template typename t 通用函式定義 注意 關鍵字...