c 模版學習

2021-05-27 22:28:01 字數 1456 閱讀 4204

1、模板的概念

我們已經學過過載(overloading),對過載函式而言,c++的檢查機制能通過函式引數的不同及所屬類的不同。正確的呼叫過載函式。例如,為求兩個數的最大值,我們定義max()函式需要對不同的資料型別分別定義不同過載(overload)版本。

//函式1.

int max(int x,int y)

//函式2.

float max( float x,float y)

//函式3.

double max(double x,double y)

但如果在主函式中,我們分別定義了 char a,b; 那麼在執行max(a,b);時 程式就會出錯,因為我們沒有定義char型別的過載版本。

現在,我們再重新審視上述的max()函式,它們都具有同樣的功能,即求兩個數的最大值,能否只寫一套**解決這個問題呢?這樣就會避免因過載函式定義不 全面而帶來的呼叫錯誤。為解決上述問題c++引入模板機制,模板定義:模板就是實現**重用機制的一種工具,它可以實現型別引數化,即把型別定義為引數,從而實現了真正的**可重用性。模版可以分為兩類,乙個是函式模版,另外乙個是類模版。

2、 函式模板的寫法

函式模板的一般形式如下:

template

返回型別 函式名(形參表)

說明: template是乙個宣告模板的關鍵字,表示宣告乙個模板關鍵字class不能省略,如果型別形參多餘乙個 ,每個形參前都要加class 《型別 形參表》可以包含基本資料型別可以包含類型別。

請看以下程式:

#include using std::cout;

using std::endl;

//宣告乙個函式模版,用來比較輸入的兩個相同資料型別的引數的大小,class也可以被typename代替,

//t可以被任何字母或者數字代替。

template t min(t x,t y)

int max(int x , int y)

int max(char x , int y)

int max(int x , char y)

int main(void)

在類定義體外定義的成員函式,應該使用函式模板。

/*類模板,但是在類外定義成員函式的時候,需要使用函式模板

*/#include using namespace std ;

template class base

t geta() //類內定義

void seta(t c);

};template //模板在類外的定義

void base::seta(t c)

int main(void)

{ base b(4);

coutbc.seta(4.3);

cout<

注意成員函式在類外定義的情況。

3 、模板類

主要指的是 stl 模板類

初探C 類模版學習筆記

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

初探C 類模版學習筆記

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

模版的學習

解決 模版類在外部定義成員是應該在前面加上 store fun 如果只是加了store fun 就會丟擲這個異常。體會 有些細節是需要研究的,有些細節是不必探索的,應為那些東西網上很容易可以找到。解決 呼叫時fun hehe 1 因為 hehe 是const char 型別,所以t const ch...