读书人

简单重载函数出错,why?解决方法

发布时间: 2012-03-18 13:55:39 作者: rapoo

简单重载函数出错,why?
#include <iostream>
using namespace std;

int abs(int i);
double abs(double d);
long abs(long l);

void main()
{
abs (-10 ) ;
abs(-10.0) ;
abs (-9L) ;
}

int abs(int i)
{
cout < < "Using integer abs()\n ";
if(i <0) i=-i;
cout < <i < <endl;
return 0;
}

double abs(double d)
{
cout < < "Using double abs()\n ";
if(d <0) d = -d;
cout < < d < <endl;
return 0;
}

long abs (long l)
{
cout < < "Using long abs()\n ";
if(l <0) l=-l;
cout < < l < <endl;
return 0;

}
+++++++++++
结果是:
10
10
9
______

为什么不是输出:
10
10.0
9
???

[解决办法]
cout < < std::setprecision(x) < < d < <endl;
再试
[解决办法]
double abs(double d)
{
cout < < "Using double abs()\n ";
if(d <0) d = -d;
cout < < d < <endl;
return 0;
}

这个函数返回值怎么是0,是DOUBLE吗?

还有这个函数,一样的

long abs (long l)
{
cout < < "Using long abs()\n ";
if(l <0) l=-l;
cout < < l < <endl;
return 0;

}
[解决办法]
俺也认为问题出在返回值上
[解决办法]
因为cout默认采用的不是定点小数格式,对于10.0,输出的时候,会去掉小数后面部分,对于6.9,输出的时候,才会保留小数后面的内容。
想让cout输出小数点后面的0,你应该设置cout为定点输出格式。
cout.setf(ios_base::fixed, ios_base::floatfield);
[解决办法]
class都没有...
[解决办法]
跟返回值没有关系,是因为cout默认采用的是“一般格式”, general格式,此格式会去掉小数后面的零。要想保留小数点后面的零,就必须设置输出浮点数的输出格式为定点格式:fixed

读书人网 >C++

热点推荐