目录
函数模板
- 实际上就是建立一个通用函数,其函数返回值类型和形参类型不具体指定,用一个虚拟的类型来代表
- template 是一个关键字 ,表示下面定义的是一个模板
- typename 也是一个关键字,后面跟的T是一个虚拟的数据类型,可以用class来代替
-
其函数返回值数据类型 和 形参的数据类型 不具体指定,用一个虚拟的类型在代表
思考
void _swap(int &a,int &b)
{
a = a+b;b=a-b;a=a-b;
}
void _swap(double &a,double &b)
{
a = a+b;b=a-b;a=a-b;
}
void _swap(char &a,char &b)
{
a = a+b;b=a-b;a=a-b;
}
不断重写swap函数,太过麻烦
我们可以建立一个通用板的函数
template<typename T>
void _swap(T &a,T &b)
{
cout<<"template"<<endl;
a = a+b;b=a-b;a=a-b;
}
int a = 10,b=20;
当_swap(a,b);调用后
会自动生成void _swap(int &a,int &b)
如果两个参数的类型不一样可以下面这么写
template<typename T,typename Tx>
void _swap(T &a,Tx &b)
{
cout<<"template"<<endl;
a = a+b;b=a-b;a=a-b;
}
如果有指定返回参数可以下面这么写
template<typename T=int>
T _max(T a,T b)
{
T c;
return a>b?a:b;
}
int a = 10,b=20;
_max<int>(a,b);---->int _max(int a,int b)
实战 找出三个数中最大的一个
template<typename T>
T _max(T a,T b,T c)
{
return a>b ? (a>c?a:c) : (b>c?b:c);
}
cout<<max<int>(10,20,30)<<endl;
如果在类中实现
class Max
{
public:
Max();
template<typename T>
T max(T a,T b,T c);
};
如果有max.cpp max.h,那下面模板函数定义一定要放到.h里,上面的也可以放到.h里
template<typename T>
T Max::max(T a,T b,T c)
{
return a>b ? (a>c?a:c) : (b>c?b:c);
}
调用方法如下
Max mya;
cout<<mya.max<int>(10,20,30)<<endl;