C 學習筆記 類模板

2021-08-13 06:01:05 字數 2167 閱讀 7094

c++中將泛型思想引入到了類,實現了類模板,使得類的實現不再關注資料元素的具體型別,而只關注類所需實現的功能,適用於編寫資料結構相關**。

c++中的類模板以相同的方式處理不同的型別,在類的宣告前使用template關鍵字標識將要泛型程式設計,用於說明類中使用的t是泛指型別,類模板只能顯式指定具體型別,無法像函式模板那樣能夠自動推導,下面給出定義過程和使用方法:

template < typename t >

class operator

};

使用:

operatorop1;//使用具體型別定義物件

cout << op1.add(1, 2) << endl;

注意:

類模板宣告的泛指型別t可以出現在類模板的任意地方。

編譯器對類模板的處理方式和函式模板相同,通過具體型別從類模板產生不同的類,在宣告的地方對類模板**本身進行編譯,在使用的地方對引數替換後的**進行編譯。

類模板的工程應用:

類模板必須在標頭檔案中定義。

類模板不能分開實現在不同的檔案中。

類模板外部定義的成員函式需要加上模板< >宣告。

以上並非硬性規定,只是工程中使用起來閱讀性更強。

#ifndef _operator_h_

#define _operator_h_

template < typename t >

class operator

;template < typename t >

t operator::add(t a, t b)

template < typename t >

t operator::multiply(t a, t b)

#endif

這就完全符合工程應用中的規定。實現是在標頭檔案中,但是使用依舊和普通類成員函式一樣,在原始檔中使用。

多引數類模板

類模板可以定義任意多個不同的型別引數。

template

< typename t1, typename t2 >

class test

;

在使用的時候需要將引數型別顯式指定出來,例如:

testt1;
類模板可以被特化,就是指定型別引數的類模板的特定實現,和前面一樣,部分型別引數必須顯式指定,特化模型有兩種,部分特化和完全特化,部分特化就是多個引數都一樣,但是並未指定出具體型別,完全特化就是多個參數顯式指定出具體型別,用前面的類模板做例子實現部分特化和完全特化:

部分特化:

template< typename t >

class test < t, t > // 當 test 類模板的兩個型別引數完全相同時,使用這個實現

;

完全特化;

template<  >

class test < int, int > // 當 test 類模板的兩個型別參數顯式指定,使用這個實現

;

指標相關的特化實現;

template< typename t1, typename t2 >

class test < t1*, t2* > // 指標的特化實現

;

這些

特化只是模板的分開實現,本質上還是同乙個模板,並且所有特化模板的使用方式都是統一的,必須顯式指定每乙個型別引數,當你使用了不同組合的引數型別,是編譯器自動選擇呼叫哪乙個特化實現的。

類模板特化與重定義的區別:

重定義:乙個類模板和乙個新類(或者兩個類模板),使用的時候需要考慮如何選擇的問題。

特化:以統一的方式使用類模板和特化類,編譯器自動優先選擇特化類。

函式模板也支援特化,但是只支援引數型別完全特化。

函式模板和完全特化的函式模板:

template< typename t >//函式模板

bool equal(t a, t b)

template< >//完全特化

bool equal(double a, double b)

工程中建議當需要過載函式模板時優先考慮使用模板特化,當模板特化無法滿足要求再使用函式過載。

C 學習筆記 類模板

類模板的例項化必須由程式設計師在程式中顯式地制定。定義模板類物件的格式 類模板名 型別實參表 物件名 實參表 舉個栗子 include using namespace std const int size 10 template typename atype 定義類模板 class atype at...

初步C 類模板學習筆記

實現 在上課時間的定義給它的乙個或多個引數,這些引數代表了不同的資料型別。抽象的類。在呼叫類模板時,指定引數,由編譯系統依據引數提供的資料型別自己主動產生對應的模板類 詳細的類。c 的類模板的寫法例如以下 template 型別參數列 型別參數列的寫法就是 class 型別引數1,class 型別引...

C 基礎學習筆記 類模板

一 類模板 1 類模板作用 語法 template typename t class 類名 解釋 include include using namespace std class person tyname name tyage age intmain 2 類模板與函式模板的區別 1.類模板無法使...