C 函式模板和類模板

2021-09-30 17:18:02 字數 2447 閱讀 9540

一、函式模板

1.概念

實際是建立乙個模型,然後根據這個模板去例項化一些物件,它的函式型別形參型別不具體指定,用乙個虛擬的型別來代表,這個通用的函式就稱為函式模板,只要是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需要在模板中定義一次,在呼叫函式時,編譯器會根據實參的型別對函式進行推演,從而實現了函式不同的功能。

例如下面能實現加法功能的模板:

template

<

class

t>

//class和typename都可以

t add

(t left, t right)

上面的class和struct不能互換,這也是c++中struct和class的乙個區別。

2.使用規則

(1)普通函式呼叫時支援型別的隱式轉換,函式模板不支援型別的隱式轉換。

void

print

(int a,

int b)

intmain()

將上面的函式print改為函式模板:

template

<

class

t>

void

print

(t a, t b)

intmain()

解決上述問題的方法有兩種:

第一種:稱為顯式例項化

template

<

class

t>

void

print

(t a, t b)

intmain()

第二種:將函式模板的引數列表進行擴充

template

<

classt1,

class

t2>

void

print

(t1 a, t2 b)

intmain()

3.過載的特性

template

<

class

t>

void

print

(t a, t b)

template

<

class

t>

void

print

(t a, t b,t c)

函式模板機制:

編譯器會對函式模板進行兩次編譯

1.在宣告的地方對模板**本身進行編譯。

2.在呼叫的地方對引數替換後的**進行編譯。

說明模板函式是由函式模板產生的。

二、類模板

template

<

class

t>

class

seqlist

~seqlist()

;void

_checkcapacity()

}void

pushback

(const t& data)

//為什麼給成引用?因為有可能是自定義型別的引用,所以傳遞效率要高一些

void

popback()

} t&

operator

(size_t index)

const t&

operator

(size_t index)

const

t&front()

const t&

front()

const

t&back()

const t&

back()

const

void

insert

(size_t pos,

const t& data)

else

_pdata[pos]

= data;

_size++;}

}void

erase

(size_t pos)

else}}

private

: t* _pdata;

size_t _capacity;

size_t _size;};

template

<

class

t>

seqlist::~

seqlist()

}

模板類就是類模板例項化後的乙個產物,類模板就是乙個飛機模型,模板類就是這個模型做出來的飛機。

C 函式模板和類模板

一 函式模板 c 提供了函式模板 function template 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會...

函式模板和類模板(C )

所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。函式模板和普通函式的區別 函式模板不允許自動型別轉化,普通函式能夠進行自動型別轉換 函式模板和普通函式在一起呼叫的規則 1 函式模板可以像普通函式一樣被過載 2 c 編譯器優先...

C 類模板和函式模板

1 類模板 include using namespace std 通用類模板 template classt1,class t2 通用模板 class compare 在這裡不能寫型別 template classt1,class t2 這裡必須寫 compare compare 類模板全特化 t...