Complex(double ss = 0, double xx = 0)
目前创新互联已为上1000家的企业提供了网站建设、域名、雅安服务器托管、网站托管运营、企业网站设计、登封网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
参数有默认值。 对于这种形式, 和Complex(1,2); Complex(1); Complex();
三种都可以匹配的。
所以 Complex(double ss = 0) { _s = ss; }//构造一个实数
这个是多余的。
简单一点,rectangle a; 这个定义产生了冲突,它既可以调用 rectangle(int i=0,int j=0,int k=0)进行构造也可调用rectangle()进行构造。这两个构造函数对rectangle a;并没有优先关系,因此系统不能识别该调哪个函数。
不建议楼主的rectangle(int i=0,int j=0,int k=0)这个构造函数,这样写没多大意义,一般来说如果要使用默认的参数,只提供部分的默认参数,而不是全部提供。
从语法上来说,完全没问题,但这么做从运行上来说很可能没有意义或出现错误. 首先要明白,重载函数指的是同一个函数名但参数数目或类型不同,比如函数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个实参——也就是说重载函数中使用形参默认值往往没有意义而且在某些情况下会出错。 不知道这样解释你明白没有
重载函数一般区别于参数类型,参数个数;
图片看不清无法判断,但是基本上这个错误就是你所的重载函数的参数类型不确定。
编译器无法通过参数类型判断你调用的是具体哪个函数;
比如对于重载函数
A(double aa,double bb);
A(float aa,float bb);
A(char aa,char bb);
//调用为
int int i,j;
A(i,j);//此时重载函数中没有int型参数的重载,就会报错调用不明确
//正确用法
A(double(i),double(j));//做强制转换,明确调用的函数
补充,看了你其他的提问,图片看到了,错误是switch()这个函数参数类型是整型int,你用了浮点
型以及sqrt()函数没有整形的参数,你需要将整型强制转换为浮点型