开发者社区> 问答> 正文

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

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

展开
收起
爱吃鱼的程序员 2020-06-12 15:35:48 547 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

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

    <preclass="brush:cpp;toolbar:true;auto-links:false;">friendostream&operator<<(ostream&,number&);修改成

    <preclass="brush:cpp;toolbar:true;auto-links:false;">friendostream&operator<<(ostream&,constnumber&);这个主要涉及到引用,左值,右值的问题。



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

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

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


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


    2020-06-12 15:36:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载