Bat__Man_ 2020-06-29 16:35 采纳率: 0%
浏览 141

为什么转换构造函数和运算符重载+时用引用作为形参时c3=c1+1;报错而不用引用作为运算符重载形参时则编译通过

#include
using namespace std;
class Complex
{
int r,i;
public:
Complex(){r=0;i=0;}
Complex(int t){r=t;i=0;}
Complex(int t,int m):r(t),i(m){}
friend Complex operator + (Complex t1,Complex t2);
friend ostream& operator << (ostream&,Complex&);
};
Complex operator + (Complex t1,Complex t2)
{
return Complex(t1.r+t2.r,t1.i+t2.i);
}
ostream& operator << (ostream &output,Complex &t)
{
if(t.i>0)
output<<t.r<<"+"<<t.i<<"i"<<endl;
else if(t.i==0)
output<<t.r<<endl;
else if(t.i<0)
output<<t.r<<t.i<<"i"<<endl;
return output;
}
int main()
{
Complex c1(1,2),c2(2,-2),c3;
c3=c1+c2;
cout<<c3;
c3=c1+1;
cout<<c3;
}
为什么把friend Complex operator + (Complex t1,Complex t2);改为friend Complex operator + (Complex& t1,Complex& t2);就会在c3=c1+1;这里出错?

  • 写回答

2条回答 默认 最新

  • wlj1234 2020-07-01 10:05
    关注

    1是常数不是变量,不能直接作为变量引用。Complex& t2是变量的引用,是告诉调用者,t2的值可能在函数中被改变。
    程序可以改成
    friend Complex operator + (const Complex& t1, const Complex& t2);
    意思是函数中t1、t2都不会改变,1赋值改参数2,会创建一个新的Complex对象t2

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序