ide为windows下的g++,我重载了流插入运算符<<,在传递参数时出现错误,代码如下:
#include <iostream>
using namespace std;
class number{
private:
double a,b,c,d;
public:
number(double x1,double x2,double x3,double x4):a(x1),b(x2),c(x3),d(x4){}
number(){}
number operator +(number &plu);
friend number operator *(number &mul,number &mul1);
number operator --(int);
friend ostream& operator <<(ostream &,number &);
};
number number::operator +(number &plu)
{
number num;
num.a=a+plu.a;
num.b=b+plu.b;
num.c=c+plu.c;
num.d=d+plu.d;
return num;
}
number operator *(number &mul,number &mul1)
{
number result;//需要构造函数的重载
result.a=mul.a*mul1.a;
result.b=mul.b*mul1.b;
result.c=mul.c*mul1.c;
result.d=mul.d*mul1.d;
return result;
}
number number::operator --(int)
{
this->a=a--;
this->b=b--;
this->c=c--;
this->d=d--;
return *this;
}
ostream& operator <<(ostream &output,number &num)
{
output<<num.a<<endl<<num.b<<endl<<num.c<<endl<<num.d<<endl;
return output;
}
int main()
{
number number1(158.1,124.39,332.2,967.03);
number number2(2.3,32.3,48.4,64.3);
number number3,number4;
number3=number1+number2;
cout<<(number1+number2)<<endl<<(number1*number2)<<endl;
cout<<number1--<<endl;
return 0;
}
问题:在int main()中,cout<<(number1+number2)<<endl<<(number1*number2)<<endl;
cout<<number1--<<endl;这两句代码有问题,报错是传递参数出错
问编译问题最好带上编译报错,我猜,friendostream&operator<<(ostream&,number&); 后面这个改成constnumber&试试,因为你num--是返回一个临时变量作为<<的输入,可能g++中不允许对返回的临时变量操作,另外你的--的重载中类似 this->a=a--;这样的代码真的有意义么
问题一堆, operator--这个重载有问题this->a--即可,你this->a=a--这样写,=两边都在修改a,是undefined的.编译器应该会告警.
operator<<这个重载用const修饰第二个参数,没修改值尽量用const.
operator+和operator*的参数都用const修饰"只读"访问尽量用const
这样改完就可以编译运行了亲测可用
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。