标签:
函数模板和模板函数
(1)函数模板
函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。
函数模板的声明形式为:
template<typename(或class) T>
<返回类型><函数名>(参数表)
{
函数体
}
其中,template是定义模板函数的关键字;template后面的尖括号不能省略;typename(或class)是声明数据类型参数标识符的关键字,用以说明它后面的标识符是数据类型标识符。这样,
在以后定义的这个函数中,凡希望根据实参数据类型来确定数据类型的变量,都可以用数据类型参数标识符来说明,从而使这个变量可以适应不同的数据类型。例如:
template<typename(或class) T>
T fuc(T x, T y)
{
T x;
//……
}
函数模板只是声明了一个函数的描述即模板,不是一个可以直接执行的函数,只有根据实际情况用实参的数据类型代替类型参数标识符之后,才能产生真正的函数。
(2)模板函数:
模板函数的生成就是将函数模板的类型形参实例化的过程。
#include <iostream>
template <class T>
T my_min(T x,T y)//取2个数最小值
{
return (x<y)?x:y;
}
template <class T>
void my_swap(T *x,T *y)//交换两个数
{
T temp=*x;
*x=*y;
*y=temp;
}
int main()
{
int i1=5,i2=6;
double d1=6.5,d2=1.1;
using namespace std;
cout<<"较小的数是:"<<my_min(i1,i2)<<endl;
cout<<"较小的double是:"<<my_min(d1,d2)<<endl;
cout<<"i1="<<i1<<",i2="<<i2<<endl;
cout<<"交换后的结果"<<endl;
my_swap(&i1,&i2); //系统将用实参i1,i2的数据类型int去代替函数模板中的T生成函数
my_swap(&d1,&d2); //系统将用实参d1,d2的数据类型double去代替函数模板中的T生成函数:
cout<<"i1="<<i1<<",i2="<<i2<<endl;
cout<<"d1="<<d1<<",d2="<<d2<<endl;
return 0;
}
标签:
原文地址:http://www.cnblogs.com/cclhf/p/4721193.html