前言
C++提供了函数模板(functiontemplate)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。
1)C++提供两种模板机制:函数模板、类模板
2)类属 —— 类型参数化,又称参数模板
使得程序(算法)可以从逻辑功能上抽象,把被处理的对象(数据)类型作为参数传递。
模板把函数或类要处理的数据类型参数化,表现为参数的多态性,称为类属。
模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。
1*函数模板定义的形式
template <类型形式参数>
类型形式参数为:typename T1,typename T2,...,typename Tn 或者 class T1,...,class Tn
<1>函数模板的声明
template <typename T>
类型 函数名(形参列表)
{
语句序列
}
例如:
template <typename T>
void myswap(T &a,T &b)
{
T c;
c=a;
a=b;
b=c;
}
int main()
{
int x=10;
int y=20;
myswap<int>(x,y);//函数模板,显示类型调用
cout<<"x="<<x<<"y="<<y<<endl;
char a='a';
char b='b';
myswap(a,b);//自动类型推导,不常用
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}
函数模板调用
myswap<float>(a,b); //显示类型调用
myswap(a, b); //自动数据类型推导