定义求绝对值的函数模板并进行不同的调用(P331)
/*
背景:
设计程序中的函数时,可能会遇到函数中参数的类型有差异,但需要实现的功能类似的情形。函数重载可以处理这种情形。但是,如果还要交换其他类型的量,则还需编写另外的Swap()函数。
为了提供效率,实现代码复用,C++提供了一种处理机制,即使用函数模板。函数在设计时并不使用实际的类型,而是使用虚拟的类型参数。
概念:
用实际的类型来实例化这种函数时,按照模板来制造新的函数。
格式如下:
template<模板参数表>
返回类型名 函数模板名(参数表)
{
函数体的定义
}
函数模板的定义以关键字template开头,<模板参数表>,由逗号分隔的模板参数构成,形式是“类型 参数名,类型 参数名”。
编译器以函数模板为样板,生成一个函数,即产生模板函数,这个过程称为函数模板实例化。
函数模板实例化的过程由编译器完成。
函数模板的示例
把处理不同类型的公共逻辑抽象成函数,就得到了函数模板。调用函数模板时,类似于一般函数的调用,但需要给出具体的实参。
调用函数模板时,不进行实参到形参类型的自动转换。
template <typename T>
T abs(T x)
{
函数体
}
int main()
{
int n;
cout<<abs(n)<<endl;
}
*/
#include<iostream>
using namespace std;
template<typename T>
T abs(T x)
{ return x<0? -x:x;
}
int main()
{
int n=-5;
int m=10;
double d=-.5;
float f=3.2;
cout<<n<<"的绝对值是"<<abs(n)<<endl;
cout<<m<<"的绝对值是"<<abs(m)<<endl;
cout<<d<<"的绝对值是"<<abs(d)<<endl;
cout<<f<<"的绝对值是"<<abs(f)<<endl;
return 0;
}

浙公网安备 33010602011771号