C 學習筆記(8) 模板

2021-08-08 04:18:34 字數 2215 閱讀 1436

模板主要是提供一種處理方式,相當於加強版的函式處理,裡面的引數型別,處理方式都能夠被模板化,傳統的函式處理是不能夠針對多種處理方式的,所以會出現函式的過載問題。

模板主要包括兩個方面:

- 針對函式的模板,格式:template 函式返回值 函式名稱 (函式引數);例如template void swap(t& a, t& b){},其中的class能夠變成typename

- 針對類的模板,格式template class classname;例子:template class a;當函式在外部宣告的是姑姑也template《模板形參列表》 函式返回型別 類名《模板形參名》::函式名(引數列表),所以為template t a::hy(t c, t &d);

針對函式的模板

格式:

template

返回型別 函式名(引數列表)

例子:

template t> t add (t a,t b)
當呼叫這樣的模板函式時型別t就會被被呼叫時的型別所代替,比如swap(a,b)其中a和b是int 型,這時模板函式swap中的形參t就會被int 所代替,模板函式就變為swap(int &a, int &b)。而當swap(c,d)其中c和d是double型別時,模板函式會被替換為swap(double &a, double &b),這樣就實現了函式的實現與型別無關的**。

針對類的模板

類模板的格式

template class a

template t1 a::add(t1 t1,t2 t2)

呼叫:(假如有兩個引數)

那麼am

m就是變數,其中裡面的t1對應int類性資料,t2對應double型別資料

類模板物件的建立:比如乙個模板類a,則使用類模板建立物件的方法為a m;在類a後面跟上乙個<>尖括號並在裡面填上相應的型別,這樣的話類a中凡是用到模板形參的地方都會被int 所代替。當類模板有兩個模板形參時建立物件的方法為am;型別之間用逗號隔開。

外部函式宣告方式:

template《模板形參列表》 函式返回型別 類名《模板形參名》::函式名(引數列表)

比如有兩個模板形參t1,t2的類a中含有乙個void h()函式,則定義該函式的語法為:

templatevoid a::h(){}

注意模板的宣告只能夠在全域性變數中申明,不能夠在區域性宣告

例子:

#include 

#include

#include

#include

#include

using

namespace

std;

template

class stack

}; template

void stack::push (t const& elem)

template

void stack::pop ()

// 刪除最後乙個元素

elems.pop_back();

} template

t stack::top () const

// 返回最後乙個元素的副本

return elems.back();

} int main()

catch (exception const& ex)

}

執行結果

7

hello

exception: stack

<>

::pop(): empty stack

typename 另外乙個作用為:使用巢狀依賴型別(nested depended name),如下所示:

class myarray 

template

void mymethod( t myarr )

這個時候 typename 的作用就是告訴 c++ 編譯器,typename 後面的字串為乙個型別名稱,而不是成員函式或者成員變數,這個時候如果前面沒有

typename,編譯器沒有任何辦法知道 t::lengthtype 是乙個型別還是乙個成員名稱(靜態資料成員或者靜態函式),所以編譯不能夠通過。

c 學習筆記 8 關於模板類

1 就算是預設建構函式不需要構造任何東西,也要寫出乙個空函式體!如大整數類class long int return is 代碼有誤。待修改!int size void output private std vectordata long int long int 這一句不能少,即使是空函式體!2 ...

c 學習筆記8

運算子和表示式引入 由運算子和運算物件組成的式子稱為表示式。表示式的結果除了確定的值之外,還有確定的資料型別 c 運算子常用分類 根據運算性質 算術運算子 自增和自減 賦值運算子 關係運算子 邏輯運算子 根據運算物件個數 單目運算子 乙個運算物件 如 取相反 等。雙目運算子 兩個運算物件 如 等。三...

C 學習8 模板初步理解

類模板是在類的定義時,不能確定成員的型別時,為了防止 的冗餘,用t代替。t是乙個型別,告訴編譯器,型別還沒有繫結,不知道現在是什麼型別。使用的時候,類名後要用尖括號把型別名括起來。complex int a 1,2 complex double a 1.0,2.0 當編譯時,編譯器看到了使用者的t是...