c 之初識模板

2021-09-26 19:13:55 字數 2509 閱讀 2557

模板:函式模板和類模板

一:函式模板

1:概念 函式模板代表了乙個家族,在使用時被引數化,根據實參型別產生函式的特定型別模板。

2:函式模板格式:

template.,typename tn>
返回值型別 函式名(引數列表){}

template

void

swap

(t& left, t& right)

注意:typename是用來定義模板引數關鍵字,也可以使用class,(切記:不可用struct代替class)

//模板型別引數:盡量設定成引用型別+如果不需要通過形參改變外部實參const

3:函式模板例項化編譯器在編譯期間,根據例項化實參的型別,推演模板引數列表中t的實際型別,根據推演的實際型別生成處理實際型別逼得具體函式。

對於函式部分,編譯分為兩個階段:

1:對函式模板進行簡單的語法檢測

2:根據例項化生成具體**,詳細編譯生成的**

template

t add

(const t& a,

const t& b)

intmain()

自定義型別

template

t add

(const t& a,

const t& b)

class complex

complex operator+

(const complex& c)

const

private:

double _real;

double _image;};

intmain()

4:模板引數匹配原則

乙個非模板函式可以和乙個同名的函式模板同時存在,而且該函式模板還可以例項化為這個非模板函式

int

add(

int a,

int b)

template

t1 add

(const t& a,

const t& b)

intmain()

對於非模板函式和同名函式模板,如果其他條件相同,在呼叫是會優先呼叫非模板函式而不會從該模板產生乙個例項,如果模板可以產生乙個更好匹配的函式,那麼選擇模板

int

add(

int a,

int b)

template

t1 add

(const t1& a,

const t2& b)

intmain()

模板函式不允許自動型別轉換,但普通函式可以進行自動型別轉換

二:類模板

template

class seqlist

seqlist

(size_t n,

const t& data =t(

)):_array

(new t[n]),

_capacity

(n),

_size

(n)}

~seqlist()

}void

pushback

(const t& data)

;void

popback()

; size_t size()

const

size_t capacity()

const

bool empty()

const

t& operator[

](size_t index)

const t& operator[

](size_t index)

const

void

print()

cout << endl;

}private:

t* _array;

size_t _capacity;

size_t _size;};

template

void seqlist::

pushback

(const t& data)

template

void seqlist::

popback()

--_size;

}int

main()

類模板的例項化

類模板例項化與函式模板例項化不同,類模板例項化需要在類模板名字後跟 <>,然後將例項化的型別放在<>中即可,類模板名字不是真正的類,而例項化的結果才是真正的類。

//vector類名, vector才是型別

vector<

int> s1;

vector<

double

>s2;

C 記憶體管理 之 初識allocator

allacator中文稱為 記憶體配置器 通常它是乙個類,負責提供記憶體管理 可能包含記憶體分配 釋放 自動 等能力 相關的服務。例如,我們通過c提供的malloc free即刻提供乙個allocator實作出來 class alloc 注意這裡有看似多餘的引數cb,這完全是為了和後續提供的allo...

C和指標之初識篇

一 基礎細節 1.程式從標準輸入中讀取輸入行並在標準輸出中列印這些輸入行 首先讀取一串列標號,每一行的列標號從0 開始,以乙個負數作為結束標誌,列標號都是成對出現,表示讀取列的範圍。輸入如下 3 7 8 15 1 輸出第3 7列,8 15列qwertyuiopasdfghjkl i love you...

OSPF之初識篇

本人初學tcp ip協議,ospf為重點。現在此地寫下學習逐步歷程 本篇為基礎入門第一步 一 背景 ospf是鏈結狀態協議中最具代表性的協議,鏈結狀態協議與距離向量協議同為動態路由協議的分類 路由分為動態路由和靜態路由,動態路由協議即針對動態路由的協議。路由協議又對路由以及路由表起到了什麼作用呢?以...