C 泛型程式設計(函式模板和類模板)部分整理

2021-10-08 09:45:56 字數 3167 閱讀 7779

- 模板:

模板就是建立通用的模具,大大提高復用性,但並不是萬能的

函式模板:

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 定義兩個泛型,其實定義乙個也...