(41 1)類模板之類模板的定義

2021-10-02 19:27:18 字數 2662 閱讀 8610

class

compare_int

//建構函式

float

max(

)//求最大值

float

min(

)//求最小值

private :

int x,y;

}class

compare_double

//建構函式

float

max(

)//求最大值

float

min(

)//求最小值

private :

double x,y;

}

template 《模板形參表》

class 類模板名

;

<

class 型別引數1

,class 型別引數2,.

....

.>

template <

class

t>

//類模板定義

class

point

//預設建構函式

point(const t a, const t b)

: x(a)

, y(b)

//帶引數建構函式

void set(const t a, const t b)

; void display(

) private:

t x, y;

};

template 《模板形參表》

返回型別 類名《型別參數列》

::函式名(形式引數列表)

eg:template <

class

t>

void point

::set(const t a, const t b)

//屬於類模板裡面的成員函式

類模板名《型別實參表》 物件名列表;

類模板名《型別實參表》 物件名1

(實參列表1

), 物件名2

(實參列表2),

....

..;

point <

int> a, b;

//定義類模板物件, 呼叫預設建構函式

point m(1,

2), n(3,

4);//定義類模板物件 , 呼叫帶引數建構函式,物件m和n裡面的資料成員都是double型別的

template <

classt,

int n>

//t表示t型別

class

sequence

private:

t array[n];}

;template <

classt,

int n>

void sequence

::set(

int i, t value)

//屬於sequence類型別的實參

sequence <

int,

5> a;

//提供型別和常量表示式,

int對應t,5對應大寫的n,資料是int型的,長度為5

sequence 5> b;

//提供型別和常量表示式

for(i=

0;i<

5;i+

+) a.set(i,i)

;//給a的陣列成員賦值

for(i=

0;i<

5;i+

+) cout<<<

" ";

//輸出陣列成員的值

template <

class

t=char ,

int n=

10>

//類模板定義

class

sequence

;eg:

則物件定義時可以有以下形式:

sequence <> m;

//使用預設型別char和使用預設值10

sequence n;

//提供型別和使用預設值10

sequence <

int,

100> k;

//提供型別和常量表示式

extern int n;

//宣告整型n, 變數定義在另乙個編譯單元

extern struct point p;

//例項化結構體物件p, 結構體定義在另乙個編譯單元

extern class

stack s;

//例項化類物件s, 類定義在另乙個編譯單元

export template<

class

t>

class

a<

int> a;

//例項化類模板物件a, 類模板定義在另乙個編譯單元

export template<

class

t>void f (t& t)

;//例項化函式模板f,函式模板定義在另乙個編譯單元

c 模板之類模板

函式木板比較簡單,就是把函式涉及到的型別都暫時寫成乙個t,然後呼叫的時候,給出具體的引數型別,這時候就會例項化出乙個新的函式,類模板意思差不多,就是把類裡面涉及到的型別暫時寫成乙個t,然後就可以例項化的時候傳遞乙個型別,不過類模板,要顯示的傳遞型別 include using namespace s...

模板類中定義模板函式

用模板類和模板函式是c 程式猿必須掌握的技能。然而要充分運用編譯器的推導能力則不簡單。需求 建立乙個 類,每一列的型別可以任意指定 編譯期指定 每一行的元素可以任意指定 執行期確定 列數可變 編譯期指定 行數可變 執行期確定 這裡特意強調了編譯期和執行期,就是為了最大程度利用編譯器的推導能力,進行編...

STL之類模板

筆記 b站黑馬程式設計師 template template 宣告建立模板 typename 表明其後面的符號是一種資料型別,可以用class代替 t 通用的資料型別,名稱可以替換,通常為大寫字母template class person void showperon nametype m name...