c 關於模板的複習整理

2021-10-06 06:48:05 字數 2109 閱讀 3924

函式模板是建立乙個通用函式,它所用到的資料的型別(包括返回值型別、形參型別、區域性變數型別)可以不具體指定,而是用乙個虛擬的型別來代替(實際上是用乙個識別符號來佔位),等發生函式呼叫時再根據傳入的實參來推導真正的型別。這個通用函式就稱為函式模板。

確定乙個函式模板,可以為程式設計節約時間,當傳入引數時,自動推導,不用再根據情況隨時改變引數或者返回值的型別,而是由系統推導。

template這個是乙個模板頭,固定寫法,***跟乙個類(類模板)或者函式(函式模板)template是定義函式模板的關鍵字,後面緊跟尖括號<>,尖括號包圍的是型別引數。typename也是乙個關鍵字,用來宣告具體的型別引數t,這裡的t也可以用其他的符號表示,型別引數的命名規則跟其他識別符號的命名規則一樣,不過一般習慣於用t、t1等引數名。

template

<

typename t>

t fun

(t a, t b)

intmain()

輸出為:

30109

由結果可以看出,模板自動推導出所需要的引數型別。

函式模板與普通函式的區別,以及呼叫原則

1、函式模板和普通函式可以過載。

2、如果出現過載,優先呼叫普通函式,如果普通函式沒有實現,報錯

3、想要強制呼叫模板,那麼可以使用顯示指定型別呼叫

4、如果函式模板可以產生更好的匹配,那麼優先呼叫函式模板

template

<

typename t>

t fun

(t a, t b)

intfun

(int a,

int b)

intmain()

輸出為:

普通30

普通109

模板109

由此可見,當模板函式和普通函式過載,會優先呼叫普通函式。

若要呼叫模板函式,可以指定函式型別來呼叫,如:fun(c, d),此時呼叫的是模板函式。

函式模板也可以提前宣告,不過宣告時需要帶上模板頭,並且模板頭和函式定義(宣告)是乙個不可分割的整體,它們可以換行,但中間不能有分號。

#include

#include

using

namespace std;

//類模板.引數

template

<

typename t1,

typename t2>

class

person

;template

<

typename t1,

typename t2>

person

::person

(t1 name, t2 age)

template

<

typename t1,

typename t2>

void person

::showperson()

intmain()

輸出為:

xaiowang

18由結果可見,操作正確。同時也可以看出,在構建類模板的時候,所要遵循的規範。『

定義類模板時的格式:

template

<

typename 型別引數1

,typename 型別引數2

, …>

class 類名

;

在函式類內宣告,類外實現的時候:

template

<

typename 型別引數1

,typename 型別引數2

, …>

返回值型別 類名《型別引數1

, 型別引數2,.

..>

::函式名(形參列表)

通過類模板來建立物件的時候,需要指明具體的資料型別。比如personp("xiaowang", 18);

就在建立物件之前,定義了所要傳入模板的引數型別。

C 模板複習參考筆記

型別引數化 template 返回型別 函式名 引數列表 這裡的返回型別,引數列表的形參型別 可以寫成你在尖括號 裡規定的形參類名,如t,如下 template t min t a,m b 如果你要定義模板成員方法,1.因為它是乙個成員方法 寫外邊,加類名和作用域符 2.因為它是乙個模板方法 配合t...

C 複習整理 i 和 i

理論上 i更快,實際與編譯器優化有關,通常幾乎無差別。i 實現 為 int operator int 返回乙個int型的物件本身 i實現 為 int operator 返回乙個int型的物件引用簡單從返回的值來說,i 返回的是i的值,而 i返回的是i 1的值。從返回的東西來說,i返回的是i的引用,i...

模板相關知識 C 整理

模板是c 支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數 返回值取得任意型別。模板是一種對型別進行引數化的工具 通常有兩種形式 函式模板和類模板 函式模板針對僅引數型別不同的函式 類模板針對僅資料成員和成員函式型別不同的類。使用模板的...