重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
从语法上来说,完全没问题,但这么做从运行上来说很可能没有意义或出现错误. 首先要明白,重载函数指的是同一个函数名但参数数目或类型不同,比如函数int a(int,int)是int a()的重载.也就是说,重载函数的意义在于,让程序能够根据你的实参数量和类型来选择具体要调用的某个重载函数,比如尽管函数名都是a,但实际中a(1,2)就会调用第一个函数而不是第2个. 再说形参默认值,C++规定,在函数调用时,编译器按从左到右的顺序将实参与形参结合,当实参数目不足时,编译器将按同样的顺序用说明或定义中的默认值来补足所缺少的实参。也就是说,在一个指定了默认值的参数的右边不可以出现没有指定默认值的参数,否则就会造成错误. 也就是说,如果有这样的函数int a(int,int)和其重载int a(int,int,int),如果重载函数的第三个形参设有默认值,实际过程中可能出现如下结果: 程序中,调用函数使用a(1,2)这样的语法,编译器会自动选择第一个函数;但可能实际上你希望的是调用int a(int,int,int)型的重载,希望前两个形参使用实参传递值,而最后一个使用默认值.这样,实际就和你的期望不同,你想使用三个参数的重载函数,就必须传递3个实参——也就是说重载函数中使用形参默认值往往没有意义而且在某些情况下会出错。 不知道这样解释你明白没有
我们提供的服务有:做网站、成都网站设计、微信公众号开发、网站优化、网站认证、柳江ssl等。为上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的柳江网站制作公司
原因:
fabs(k)有点问题。
k是整数,而 fabs()有如下几种原型:
double fabs ( double x );
float fabs ( float x );
long double fabs ( long double x );
因此编译器需要将k 转为double,float和long double中的一种类型,但是有三种可能,所以编译器不知道你要的是哪一种,所以报“调用不明确”
解决方法:
以下三种调用皆可,其实就是显式转换数据类型
(int)fabs((double)k);
(int)fabs((float)k);
(int)fabs((long double)k);
c++本身已经定义了一个max函数。所以你试试下面这牙膏你就知道了
#includeiostream
using namespace std;
templateclass T
T my_max(T x,T y)
{
return xy?x:y;
}
/*int max(int x,int y)
{
return xy?x:y;
}
float max(float c,float d)
{
return cd?c:d;
}*/
int main()
{
int a,b;
float m,n;
cinabmn;
cout"a="aendl;
cout"b="bendl;
cout"m="mendl;
cout"n="nendl;
cout"The max is "std::max(a,b)endl;
cout"The max is "my_max(m,n)endl;
}