- 模板:
模板就是建立通用的模具,大大提高復用性,但並不是萬能的
函式模板:
template
函式宣告或實現
template……宣告建立模板
typename/class……表明其後面是一種資料型別
t……通用資料型別,一般表示為大寫字母
#include
using
namespace std;
template
<
typename t>
void
swap
(t &a,t &b)
intmain()
區別:
1.普通函式呼叫時可以發生自動型別轉換(隱式)
2.函式模板呼叫,如果利用自動型別推導,不會發生隱式轉換
3.如果使用顯示指定型別轉換,可以發生隱式轉換
規則:1.優先呼叫普通函式
2.可以有空模板引數列表來強調呼叫函式模板
3.函式模板可以發生過載
4.如果函式模板可以產生更好的匹配,優先呼叫函式模板
#include
using
namespace std;
void
test
(int
&a,int
&b)template
<
class
t>
void
test
(t &a,t &b)
template
<
class
t>
void
test
(t &a,t &b,t &c)
intmain()
利用具體化的模板,可以解決自定義型別的通用化
template
類實現
#include
#include
using
namespace std;
template
<
class
stringtype
,class
inttype
>
class
person
private
: stringtype n_name;
inttype n_age;};
intmain()
1.類模板沒有自動型別推導
int main()
2.類模板在模板引數列表可以有預設引數
template
int main()
此時tom,19分別預設為string和int,但定義為其他型別,仍需顯示指定
類模板成員函式在呼叫時被建立
類模板物件做好事引數:
1.指定傳入型別……直接顯示物件資料型別
2.引數模板化……將物件的引數變為模板進行傳遞
3.整個類模板……將物件型別模板化進行傳遞
#include
#include
using
namespace std;
template
<
class
stringtype
,class
inttype
>
class
person
private
: stringtype n_name;
inttype n_age;};
void
showperson1
(personint>
&p)template
<
class
stringtype
,class
inttype
>
void
showperson2
(person
&p)template
<
class
t>
void
showperson3
(t &p)
intmain()
當派生類繼承的基類是類模板時,派生類在宣告時,要指定基類t的型別
#include
#include
using
namespace std;
template
<
class
stringtype
,class
inttype
>
class
person
person()
private
: stringtype n_name;
inttype n_age;};
class
people
:public personint>};
intmain()
若不指定,編譯器無法給派生類分配記憶體
若想靈活的指定出基類t的型別,派生類也需要變成類模板
1.全域性函式類內實現……類內宣告友元
2.類外實現……需要提前讓編譯器知道全域性函式的存在
#include
#include
using
namespace std;
template
<
class
t>
class
person
;//先定義類
template
<
class
t>
//完整的函式實現
void
show
(person
&p)template
<
class
t>
class
person
person
(t age)
private
: t n_age;};
intmain()
注意與成員函式類外實現區別。 C 泛型程式設計 函式模板 類模板
以前我們寫過乙個簡單的交換函式。我們不難發現交換函式是與型別有很大關係的,int,double.那麼如何實現乙個通用的交換函式呢?void swap int left,int right void swap double left,double right void swap char left,c...
c 模板入門,泛型程式設計 函式模板 類模板
目錄 1.泛型程式設計 2.函式模板 2.1 函式模板概念 2.2函式模板格式 2.3 函式模板的原理 2.4 函式模板的例項化 2.5 模板引數的匹配原則 3.類模板 3.1 類模板的定義格式 3.2 類模板的例項化 如何實現乙個通用的交換函式?使用函式過載雖然可以實現,但是有一下幾個不好的地方 ...
函式模板(泛型程式設計)
函式模板就是將函式型別引數化,方便程式設計。1 普通函式模板 include using namespace std template template是告訴編譯器,要開始泛型程式設計了,並用t替代函式的引數型別 void myswap t a,t b template 定義兩個泛型,其實定義乙個也...