c 課件筆記 模板 函式模板 類模板

2021-09-28 07:47:14 字數 1193 閱讀 7124

模板:

在編譯器編譯階段,對於模板函式的使用,編譯器需要根據傳入的實參型別來推演生成對應型別的函式以供

呼叫。比如:當用double型別使用函式模板時,編譯器通過對實參型別的推演,將t確定為double型別,然

後產生乙份專門處理double型別的**,對於字元型別也是如此。

函式模板的例項化:

用不同型別的引數使用函式模板時,稱為函式模板的例項化。模板引數例項化分為:隱式例項化和顯式例項化。

隱式例項化就是編譯器進行推導,然後顯式例項化就是使用者在呼叫函式的時候自己就<>指定型別,如果型別不匹配編譯器會進行型別轉化,不能轉化則報錯返回。

template

<

class

t> t add

(const t& left,

const t& right)

intmain()

2. 顯式例項化:在函式名後的<

>中指定模板引數的實際型別

intmain

(void

)

如果型別不匹配,編譯器會嘗試進行隱式型別轉換,如果無法轉換成功編譯器將會報錯。

模板引數的匹配原則

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

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

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

類模板:

注意事項:

類模板中函式放在類外進行定義時,在定義的開頭需要新增模板引數列表

在使用模板類的時候,所構造出來的模板類,其實並不是乙個具體的類,而只是編譯器根據被例項化的型別生成具體類的模板。

類模板的例項化:

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

類模板只能程式設計師通過顯式例項化,而函式模板可以顯式例項化,也可以隱式例項化(通過引數讓編譯器進行型別推導)。

C 模板函式,模板類

模板如字面的意思為模具模板,並不是乙個正真的物體。例如,在編寫比較兩個數大小的 中,我們可能要比較兩個整數的大小,也能需要比較浮點數等等大小。在這些 中,基本的邏輯都是相同的,只是比較數的型別不同。此時我們就可以用模板這個概念來完成對於不同型別的引數而相同的邏輯的操作。而模板會根據實際的引數型別推演...

模板 函式模板 類模板

模板主要是針對資料型別,不同的資料型別卻具有相同的操作形式,比如說,同樣是做入棧,int和double由於資料型別不一樣,需要做兩個棧才能滿足需求,誠然可以使用函式過載,但是終歸棧的操作是一樣的,只是資料型別不一樣。所以在此基礎上,假設,我們首先將所有的資料型別視為乙個大類,將它引數化,等到要用的時...

C 模板函式 模板類小筆記

c 除了類裡的記憶體模型比較有意思之外,泛型程式設計也是很有思想的抽象。當然最有用的還是標準模板庫,帶上標準的 裡面包含了各種現成的容器,好用並且格式比較統一 美觀 include include using namespace std template const type getmax cons...