類模板和函式模板的定義和使⽤類似,但類模板使⽤時⽆法⾃動推導型別,必須顯式指定模板引數型別。
類模板在表示如陣列、表、圖等資料結構特別重要, 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 型別參數列 返回值型別 類模板名 型別引數名列表 成員函式名 參數列 類模板名 真實型別參數列 物件名 建構...