1.4普通函式和函式模板的區別
1.5普通函式和模板函式的呼叫規則
2.類模板
c++中的另一種程式設計思想成為泛型程式設計(編寫與型別無關的通用**,是**復用的一種手段),主要利用的技術就是模板。
c++中提供兩種模板機制:函式模板和類模板
函式模板代表了乙個函式家族,**該函式模板與型別無關,在使用時被引數化,**根據實參型別產生函式的特定型別版本。
template
<
typename t1,
typename t2,
typename t3...
>
返回值型別 函式名(引數列表){}
typename是用來定義模板引數的關鍵字,也可以用class
用不同型別的引數使用函式模板時,稱為函式模板的例項化。模板引數例項化分為:隱例項化和顯式例項化。
讓編譯器根據實參推演模板引數的實際型別
void
myswap
(t &a, t &b)
void
test01()
需要注意的是隱式型別例項化必須要推導出一致的資料型別t才能使用!在函式名後的<>中指定模板引數的實際型別
void
myswap
(t &a, t &b)
void
test01()
1.普通函式呼叫時可以發生自動型別轉換(隱式型別轉換)
2.函式模板呼叫時,如果利用自動型別推導,不會發生隱式型別轉換
3.如果利用顯示指定型別的方式,可以發生隱式型別轉換
①如果普通函式和函式模板都可以實現,優先呼叫普通函式
②可以通過空模板引數列表來強制呼叫函式模板
③函式模板也可以發生過載
void
myprint
(t a, t b)
template
<
class
t>
void
myprint
(t a, t b,t c)
//過載引數列表不同
④如果函式模板可以產生更好的匹配,有限呼叫函式模板
//類模板名
#include
#include
using
namespace std;
template
<
class
nametype
,class
agetype
>
class
person
void
showperson()
nametype m_name;
agetype m_age;};
void
test01()
intmain()
①類模板沒有自動型別推導的使用方式
#include
#include
using
namespace std;
template
<
class
nametype
,class
agetype
>
class
person
void
showperson()
nametype m_name;
agetype m_age;};
//1.類模板沒有自動型別推導的使用方式
void
test01()
②類模板在模板的引數列表中可以有預設引數
#include
#include
using
namespace std;
template
<
class
nametype
,class
agetype
=int
>
//類模板在模板的引數列表中可以有預設引數 預設age為int型別
class
person
void
showperson()
nametype m_name;
agetype m_age;};
void
test02()
類模板中函式放在類外進行定義時,需要加模板引數列表。類模板名字不是真正的類,而例項化的結果才是真正的類
#include
#include
using
namespace std;
template
<
class
nametype
,class
agetype
>
class
person
;template
<
class
nametype
,class
agetype
>
//在類外進行定義時,需要加模板引數列表
person
::person
(nametype name, agetype age)
;template
<
class
nametype
,class
agetype
>
//在類外進行定義時,需要加模板引數列表
void person
::showperson()
C 模板初階
template typename t void swap t left,t right intmain 在編譯器編譯階段,對於模板函式的使用,編譯器需要根據傳入的實參型別來推演生成對應型別的函式以供呼叫。比如 當用double型別使用函式模板時,編譯器通過對實參型別的推演,將t確定為double型...
Cpp 模板初階
title 模板初階 date 2019 03 18 20 37 56 tags cpp categories cpp toc true 告訴編譯器乙個模子,讓編譯器根據不同的型別利用該模子來生成 泛型程式設計 編寫與型別無關的通用 是 復用的一種手段。模板是泛型程式設計的基礎。函式模板代表了乙個函...
C 模板初階 函式模板和類模板
本節內容 泛型程式設計 函式模板 類模板1.泛型程式設計 首先問大家乙個問題,如果我們想實現乙個通用的交換函式,該怎麼做呢?我想大家會想到用過載,將不同型別引數的函式都寫出來,這是乙個解決的辦法,不過emmm 自己看 void swap int left,int right void swap do...