c 泛式程式設計 (下)類模板

2021-10-09 05:44:21 字數 2549 閱讀 1765

類模板和函式模板的定義和使⽤類似,但類模板使⽤時⽆法⾃動推導型別,必須顯式指定模板引數型別。

類模板在表示如陣列、表、圖等資料結構特別重要, c++標準庫中很多類都是基於模板技術實現。

template

<

class

t>

class

myarray

t &

operator

(int idx)

~myarray()

}public

: t *p_arr;};

void

test()

template

<

class

t>

class

myarray

t &

operator

(int idx)

~myarray()

}public

: t *p_arr;};

void

print_array

(myarray<

int>

&arr)

}template

<

class

t>

void

print_array

(t &arr)

}template

<

class

t>

void

print_array

(myarray

&arr)

}void

test()

print_array

(arr)

; print_array<

>

(arr)

; print_array<

int>

(arr)

; print_arrayint>>

(arr)

;}

⼦類例項化的時候需要具體化的⽗類,⼦類需要知道⽗類的具體型別是什麼樣的,這樣 c++編譯器才能知道給⼦類分配多少記憶體。

普通類只能繼承具體的類,不能直接繼承抽象的類模板。
template

<

class

t>

class

myarray

t &

operator

(int idx)

~myarray()

}public

: t *p_arr;};

class

submyarray

:public myarray<

int>};

void

test()

類模板的推導型別可以應⽤到基類中
template

<

class

t>

class

myarray

t &

operator

(int idx)

~myarray()

}public

: t *p_arr;};

template

<

class

t>

class

submyarray

:public myarray};

void

test()

1、類模板和普通友元函式

template

<

class

t>

class

demo

private

: t m_param;};

ostream &

operator

<<

(ostream &os, demo<

int>

&demo)

ostream &

operator

<<

(ostream &os, demo<

double

>

&demo)

void

test()

2、類模板和普通友元函式模板

template

<

class

t>

class

demo

private

:t m_param;};

/* ostream &operator<<(ostream &os, demo&demo)

*/template

<

class

t>

void

print_demo

(demo

&demo)

void

test()

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

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

C 泛型程式設計 函式模板 類模板

以前我們寫過乙個簡單的交換函式。我們不難發現交換函式是與型別有很大關係的,int,double.那麼如何實現乙個通用的交換函式呢?void swap int left,int right void swap double left,double right void swap char left,c...

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

背景 在呼叫類模板時,指定引數,由編譯系統根據引數提供的資料型別自動產生相應的模板類 template class 型別引數1 class 型別引數2,class 類模板名 template 型別參數列 返回值型別 類模板名 型別引數名列表 成員函式名 參數列 類模板名 真實型別參數列 物件名 建構...