-->
当前位置:首页 > 题库 > 正文内容

函数题:绝对值函数模板*

Luz3年前 (2022-06-06)题库1105
请设计求对象绝对值的函数模板。


#include <iostream>
using namespace std;

/* 你提交的代码将被嵌在这里 */

int main()
{
int a, b;
cin >> a;
b = Abs(a);
cout << b << endl;
return 0;
}


#### 输入样例1

in
37


#### 输出样例1

out
37



#### 输入样例2

in
-37


#### 输出样例2

out
37



提示:运用条件运算符(?:),写出高效的代码。






答案:若无答案欢迎评论

首先看下面的模板

c++
template <typename TYPE>
TYPE Abs(TYPE x)
{
return x >= 0 ? x : -x;
}


函数的参数是对象,将会执行拷贝构造函数和析构函数。

再看下面的模板

c++
template <typename TYPE>
TYPE Abs(TYPE &x)
{
return x >= 0 ? x : -x;
}


函数的参数是引用,不会执行拷贝构造函数和析构函数。但函数的参数为普通引用,不能引用常量。

而对于下面的模板

c++
template <typename TYPE>
TYPE Abs(const TYPE &x)
{
return x > 0 ? x : -x;
}


若数据类型为实型(float 或 double),则存在负零问题。当 x 为零时,函数值为 -x (负零),将输出 -0。

因此,正确答案应该是:

c++
template <typename TYPE>
TYPE Abs(const TYPE &x)
{
return x >= 0 ? x : -x;
}

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。