C 6 1函式模板與類模板整理

2021-08-18 22:06:09 字數 1406 閱讀 3452

函式模板:

1、型別的引數化:

在c++中,資料的型別也可以通過引數來傳遞,在函式定義時可以不指明具體的資料型別,當發生函式呼叫時,編譯器可以根據傳入的實參自動推斷資料型別。這就是型別的引數化。

值和型別是資料的兩個主要特徵,它們在c++中都可以被引數化。

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

在函式模板中,資料的值和型別都被引數化了,發生函式呼叫時編譯器會根據傳入的實參來推演形參的值和型別。換個角度說,函式模板除了支援 「值」 的引數化,還支援 「型別」 的引數化。

2、函式模板

template關鍵字《型別引數 可以有多個 逗號隔開》 返回值型別 函式名(形參)

例如:template//模板頭

void swap(t&a,k&b)

說明:呼叫函式時,在函式名後面加《型別》:

swap(n1,n2);

但是,但函式呼叫時候能自動推導出t k u 所有的型別,可以在函式呼叫時省略<>;  

swap(n1,n2);

3、類模板

宣告類模板的語法為:

template

class 類名

{//todo;

}類模板和函式模板都是以template開頭,後跟型別引數;型別引數不能為空,多個型別引數用逗號隔開。

一旦宣告了類模板,就可以將型別引數用於類的成員函式和成員變數了。換句話說,原來使用int、float、char等內建型別的地方,都可以用型別引數來代替。

★類模板注意點:

1、在類外定義成員函式仍然需要帶上模板頭,格式為:

template

返回值型別 類名《型別引數1 , 型別引數2, ...>::函式名(形參列表 )

{//todo;別忘記類名字後面的<>!!

}2、與函式模板不同的是,類模板在例項化時必須顯示地指明資料型別,編譯器不能根據給定的資料推演出資料型別。

除了物件變數,我們也可以使用物件指標的方式來例項化:

point* p1 = new point(10.6,109.3);

point* p1 = new point("aa","bb");

需要注意的是,賦值號兩邊都要指明具體的資料型別,且要保持一致。下面的寫法是錯誤的:

//賦值號兩邊的資料型別不一致

point*p = new point(10.6, 109);

//賦值號右邊沒有指明資料型別

point*p = new point(10.6, 109);

4、函式模板的過載

函式模板的過載與之前不同,不是通過引數型別或者個數,而是只能通過資料型別的個數來構成過載。

C 函式模板與類模板

一 函式模板 1 函式模板 建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬型別來代表這個通用函式來代表。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別來取代模板中虛擬的型別,從而實現不同函式的功能。作用 功能相同...

C 函式模板與類模板

由菜鳥網整理總結,整理文章 作者做的任務只是將知識點簡化更供人理解以及加了一些自己的認知。模版可以理解成把資料型別做成可以設定的引數化,然後在定義的時候套用,讓資料型別可以隨意變換。使用模板的目的就是能夠讓程式設計師編寫與型別無關的 比如編寫了乙個交換兩個整型int 型別的swap函式,這個函式就只...

C 函式模板與類模板

泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎.模板 函式模板 類模板 1.函式模板概念 函式模板代表了乙個函式家族,該函式模板與型別無關,在使用時被引數化,根據實參型別產生函式的特定型別版本。2.函式模板格式 template typename t1,typena...