模板函数:
模板函数是建立在重载基础上的为了减少代码量而将相同功能的 函数进行模板化的函数。通过template<typename T>声明一个模板类型,建立模板函数,在调用时,系统会根据具体的函数类型调用模板函数,在动态编程时进行相应的转换,完成函数功能的实现。
如下源代码为一个简单的加法函数,用声明的模板数据类型T来编写函数,在调用时通过参数的数据类型使T转换为相应的类型实现加法功能。当函数所需数据类型不止一种时,只需多定义一种模板数据类型,在调用时匹配不同的数据类型即可。
模板的调用分为显式调用和隐式调用两种显式调用即标明所调用函数的数据类型,显式调用还会实现强转。
#include <iostream>
using namespace std;
template <typename T> //函数模板
T add(T x,T y)
{
return x + y;
}
template <typename T,typename U> //函数模板
void print(T x,U y)
{
cout << x << "模板" << y << endl;
}
void print(int x,double y)
{
cout << x << "普通" << y << endl;
}
int main()
{
int a = 1,b = 2;
char a1 = 1, b1 = 2;
double c = 3.14,d = 6.28;
/*cout << add(a,b) << endl;
cout << add(c,d) << endl; //隐式调用
cout << add<int>(a,b) << endl; //显式调用
cout << add<double>(c,d) << endl;*/
print (a,a1);
print<int> (a,c);
//cout << add(b,d) << endl; //数据类型不统一,调用方式如下;
cout << add<int>(a,(int)c) << endl;
cout << add<double>(a,c) << endl;
return 0;
}
模板函数例程--冒泡排序:
#include <iostream>
using namespace std;
template <typename T1>
T1 *set(int len,T1 a[])
{
int i;
for(i = 0;i < len;i++)
{
cin >> a[i];
}
return a;
}
template <typename T1>
T1 *gggx sort(int len,T1 a[])
{
for(int i = 0;i < len - 1;i++)
{
for(int j = 0;j < len - 1 - i;j++)
{
T1 tmp;
if(a[j] > a[j + 1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
return a;
}
template <typename T1>
void get(int len,T1 a[])
{
int i;
for(i = 0;i < len;i++)
{
cout << a[i];
}
cout << endl;
}
int main()
{
int len = 5;
int a[10] = {0};
set(len,a);
sort(len,a);
get(len,a);
return 0;
}