c++重载流插入运算符问题? 400 报错
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;这两句代码有问题,报错是传递参数出错
问编译问题最好带上编译报错,我猜,friend ostream& operator <<(ostream &,number &); 后面这个改成const number& 试试,因为你num--是返回一个临时变量作为<<的输入,可能g++中不允许对返回的临时变量操作,另外你的--的重载中类似 this->a = a--; 这样的代码 真的有意义么
######
friend ostream& operator <<(ostream &,number &);修改成
friend ostream& operator <<(ostream &,const number &);这个主要涉及到引用,左值,右值的问题。
问题一堆, operator-- 这个重载有问题 this->a -- 即可, 你this->a = a-- 这样写, =两边都在修改a, 是undefined的. 编译器应该会告警.
operator<< 这个重载 用const修饰第二个参数 , 没修改值 尽量用const.
operator+ 和operator* 的参数 都用const 修饰 "只读"访问 尽量用const
这样改完就可以编译运行了 亲测可用
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。