c++重载流插入运算符问题

luomjaioschina 发布于 2015/07/27 21:08
阅读 211
收藏 0

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;这两句代码有问题,报错是传递参数出错

加载中
1
Ivnoidea
Ivnoidea
问编译问题最好带上编译报错,我猜,friend ostream& operator <<(ostream &,number &);  后面这个改成const number& 试试,因为你num--是返回一个临时变量作为<<的输入,可能g++中不允许对返回的临时变量操作,另外你的--的重载中类似    this->a = a--; 这样的代码 真的有意义么
0
m
magiclogy

friend ostream& operator <<(ostream &,number &);
修改成

friend ostream& operator <<(ostream &,const number &);
这个主要涉及到引用,左值,右值的问题。



0
PYPlus
PYPlus

问题一堆,  operator-- 这个重载有问题 this->a -- 即可, 你this->a = a-- 这样写, =两边都在修改a, 是undefined的. 编译器应该会告警.

operator<< 这个重载 用const修饰第二个参数 , 没修改值 尽量用const.

operator+ 和operator* 的参数 都用const 修饰 "只读"访问 尽量用const


这样改完就可以编译运行了 亲测可用


返回顶部
顶部