普通函式與函式模板的區別
普通函式呼叫時可以發生自動型別轉換(隱式型別轉換)
函式模板呼叫時,如果利用自動型別推導,不會發生隱式型別轉換
如果利用顯示指定型別的方式,可以發生隱式型別轉換
include
using
namespace std;
//普通函式與函式模板區別
//1.普通函式呼叫時可以發生隱式型別轉換
//2.函式模板 用自動型別推導,不可以發生隱式型別轉換
//3.函式模板 用顯示指定型別,可以發生隱式型別轉換
//普通函式
intmyadd01
(int a,
int b)
//函式模板
template
<
class
t>
t myadd02
(t a, t b)
void
test01()
intmain()
●普通函式與函式模板的呼叫規則
如果函式模板和普通函式都可以實現,優先呼叫普通函式
可以通過空模板引數列表來強制呼叫函式模板
函式模板也可以發生過載
如果函式模板可以產生更好的匹配,優先呼叫函式模板
#include
using
namespace std;
//普通函式與函式模板的呼叫規則
//1.如果函式模板和普通函式都可以實現,優先呼叫普通函式
//2.可以通過空模板引數列表來強制呼叫函式模板
//3.函式模板也可以發生過載
//4.如果函式模板可以產生更好的匹配,優先呼叫函式模板
void
myprint
(int a,
int b)
template
<
class
t>
void
myprint
(t a, t b)
template
<
class
t>
void
myprint
(t a, t b,t c)
void
test01()
intmain()
●模板的侷限性
模板的通用性並不是萬能的
#include
using
namespace std;
#include
//模板侷限性
//模板並不是萬能的,有些特定資料型別,需要用具體化方式做特殊實現
class
person
//姓名
string m_name;
//年齡
int m_age;};
//對比兩個資料是否相等
template
<
class
t>
bool
mycompare
(t& a, t& b)
else
}//利用具體化person的版本實現**,具體化優先呼叫
template
<
>
bool
mycompare
(person& p1, person& p2)
else
}void
test01()
else
}void
test02()
else
}int
main()
總結
利用具體化的模板,可以解決自定義型別的通用化
學習模板並不是為了寫模板,而是在stl能夠運用系統提供的模板
●類模板語法
類模板作用:建立乙個通用類,類中的成員 資料型別可以不具體制定,用乙個虛擬的型別來代表
語法:
template
<
typename t>
類
解釋:
template —宣告建立模板
typename — 表明其後面的符號是一種資料型別,可以用class代替
t —通用的資料型別,名稱可以替換,通常為大寫字母
#include
using
namespace std;
#include
//類模板
template
<
class
nametype
,class
agetype
>
class
person
void
showperson()
nametype m_name;
agetype m_age;};
void
test01()
intmain()
總結:
類模板和函式模板語法相似,在宣告模板template後面加類,此類稱為類模板
C 模板函式,模板類
模板如字面的意思為模具模板,並不是乙個正真的物體。例如,在編寫比較兩個數大小的 中,我們可能要比較兩個整數的大小,也能需要比較浮點數等等大小。在這些 中,基本的邏輯都是相同的,只是比較數的型別不同。此時我們就可以用模板這個概念來完成對於不同型別的引數而相同的邏輯的操作。而模板會根據實際的引數型別推演...
C 函式模板與普通函式
當我們要對不同的資料型別進行同樣的操作的時候,我們可能要分別編寫幾個函式去對應資料型別進行相似的操作,比如說交換兩個資料 我們使用函式模板就會大大提高效率 示例 include using namespace std template typename t 宣告乙個模板,t是乙個通用資料型別 或te...
模板函式,模板類
使用模板函式 include stdafx.h include iostream include string using namespace std template template t add const t t1,const t t2 int tmain int argc,tchar arg...