C 語言學習記錄 32 模板

2021-10-19 20:06:49 字數 3220 閱讀 6331

c++中,模板的作用就是實現**的重用,通過將某種資料型別定義為引數,然後將不同的資料型別按照實參形式傳送而實現**重用

比如如下的程式

int min(int x, int y)

class後面所跟的是型別引數名,是後面函式的形參表中引數的名稱

#include

using std::cout;

using std::endl;

template

<

class

t>

t min

(t x, t y)

void

main()

這個函式模板就可以以乙個函式實現之前多個函式的功能,極大節省了時間與空間。

這裡的t就起到乙個替代作用,在不確定輸入的是什麼資料型別的情況下代替精確的資料型別

類模板是類定義的一種模式,他將類中的資料成員各成員函式的引數值故意者返回值定義為模板,在使用中,改模板可以是任何資料型別。

類模板不是乙個具體的類,是指具有相同特性但成員的資料型別不同的一族類

template//或者class 類名
下面舉乙個例子說明模板類是如何使用的

#include

using std::cout;

using std::endl;

classa~

a()static

void

print()

friend

classb;

protected

:int m_a;};

class

bstatic

void

print()

void

show

(b b)

private

: a* a;

int m_b;};

template

<

typename t1,

typename t2>

class

ctesttemplate

void

print()

private

: t1 m_number;};

void

main()

本例首先定義了a類,在該類中又定義了乙個輸出函式,將a中的成員變數輸出,後又定義了乙個與a類相似的b類,輸出了b類的成員內容。定義了類模板類ctesttemplate,在該類中分別對其中的類成員t1和t2進行了操作,將t1賦給了成員變數,呼叫了t2的輸出函式將結果輸出

簡單來說,類模板也是給輸入型別不確定的類進行設計

模板可以看做一種型別,在使用模板函式的時候也就應該會產生它的乙個例項。

對平台型別例項化的時候通常需要提供必要的引數,模板函式並不例外,只是c++的模板引數不是一般情況下的引數,而是一種特定的型別。也就是說,在例項化乙個函式模板的時候,需要以型別作為引數

對於模板引數的呼叫,一般有以下兩種方式

1.顯示例項化模板引數

#include

using std::cout;

using std::endl;

template

<

typename t>

inline t const

&max

(t const

&a, t const

&b)int

main()

2.隱式地例項化函式模板

#include

using std::endl;

using std::cout;

template

<

typename t>

inline t const

&max

(t const

& a, t const

& b)

intmain()

這兩組**看起來是相似,不同之處只是在呼叫時是否明確呼叫的是模板中的哪一種資料型別。

t只是乙個資料型別的「代號」,如果不明確需要呼叫的資料型別的話,函式便無從下手。

模板的特殊化指的是當模板中的pattern有確定的型別時,模板有乙個具體的實現。

#include

using

namespace std;

template

<

class

t>

class

pair

t module()

};template

<

>

class

pair

<

int>

intmodule()

;};int pair<

int>

::module()

intmain()

模運算只能對整型生效,所以這裡需要在輸入非整型實數時讓函式值總是返回0,專門將模板定義為int型使用

c++支援函式模板的過載,其匹配規則如下

下面使用乙個程式詳解過載的函式模板

#include

using

namespace std;

template

<

class

t>

const t&

max(

const t& x,

const t& y)

template

<

class

t>

const t&

max(

const t& a,

const t& b,

const t& c)

const

int&

max(

const

int& x,

const

int& y)

const

char

max(

const

int& x,

char

const

& y)

void

main()

本例中首先定義了乙個函式模板用以取最大值,接下來對該函式模板進行過載,然後分別用不同函式過載函式模板

c語言學習筆記32

乙個函式可以返回乙個整型值 字元值 實型值等,也可以返回指標型的資料,即位址。其概念與以前類似,只是返回的值的型別是指標型別而已 定義返回指標值的函式的一般形式為 型別名 函式名 參數列列 左值的概念,可放在賦值號左邊的都可稱為左值 指標變數以及指標變數的間接引用都可作左值,如 int num1 0...

C語言學習要點記錄

1.運算的優先順序 算數 關係 邏輯 賦值 逗號運算子 2.複製是程式不良的表現 因為一旦乙個地方有變動要在很多地方修改 3.程式設計的過程中最好使用單一出口 4.本地變數在定義的時候不會預設初始化,引數在定義的時候一定要初始化 5.本地變數的生存期和作用域在定義的塊內 6.程式這次執行正常下次執行...

C語言學習記錄(序)

適用於超級新手小白,自學者,勿噴,謝。為什麼?據我所了解,c語言很適合打基礎,能幫助大多數想要學習其他語言的程式設計師快速入門,並且它適用於大多數平台,相容性很強。所以,經過很長一段時間的考慮和探索,我放棄了原本想要學習的python 網上說比較簡單,且能快速入門 準備學習c語言,這有利於打下基礎。...