C++如何理解这段话
重载复数运算符+时,采用下面友元函数声明:friendComplexoperator+(Complex&c1,Complex&c2);为什么不能用于“实数+复数”?怎样改...
重载复数运算符+时,采用下面友元函数声明:
friend Complex operator+(Complex &c1,Complex &c2);
为什么不能用于“实数+复数”?怎样改进才能适用?为什么?
答:使用引用类型变量作为运算符重载函数的参数,身为左值的实数类型实参不能被转换为复数,编译时无法通过。添加const说明,使实数到复数的转换隐式地在一份拷贝上进行,则可以实现“实数+复数”运算。修改后的说明为:
friend Complex operator+(const Complex &c1, const Complex &c2); 展开
friend Complex operator+(Complex &c1,Complex &c2);
为什么不能用于“实数+复数”?怎样改进才能适用?为什么?
答:使用引用类型变量作为运算符重载函数的参数,身为左值的实数类型实参不能被转换为复数,编译时无法通过。添加const说明,使实数到复数的转换隐式地在一份拷贝上进行,则可以实现“实数+复数”运算。修改后的说明为:
friend Complex operator+(const Complex &c1, const Complex &c2); 展开
2个回答
展开全部
注意:Complex的构造函数中要有
Complex(double);
将重载复数运算符+函数修改为
friend Complex operator+(const Complex &c1, const Complex &c2);
后,运行程序
Complex c1(1.5,2.4);
Complex c2(c1-2.5);
cout<<c2<<endl;
运行结果:
-1+2.4i
系统将-2.5通过构造函数Complex(double);
转化为未命名的临时的Complex的const对象(因为-2.5为左值,不能修改)。
再将c1与新生成的 未命名的临时的Complex的const对象代入函数friend Complex operator+(const Complex &c1, const Complex &c2);
进行运算。
因为,修改前,无法按上述方式进行(const对象不能赋给非const引用),所以编译不通。
有不明白的地方,hi我!
Complex(double);
将重载复数运算符+函数修改为
friend Complex operator+(const Complex &c1, const Complex &c2);
后,运行程序
Complex c1(1.5,2.4);
Complex c2(c1-2.5);
cout<<c2<<endl;
运行结果:
-1+2.4i
系统将-2.5通过构造函数Complex(double);
转化为未命名的临时的Complex的const对象(因为-2.5为左值,不能修改)。
再将c1与新生成的 未命名的临时的Complex的const对象代入函数friend Complex operator+(const Complex &c1, const Complex &c2);
进行运算。
因为,修改前,无法按上述方式进行(const对象不能赋给非const引用),所以编译不通。
有不明白的地方,hi我!
展开全部
呵呵,我也在复习这个哦。
比如说有:
Complex c2(1,5),c3;
c3=1.5+c2;
则处理1.5+c1时,系统发现和重载的函数
Complex operator+(Complex &c1,Complex &c2); 参数类型不匹配,身为左值的实数类型(这里是1.5)实参不能被转换为复数,编译时无法通过。
改成Complex operator+(const Complex &c1, const Complex &c2);后,系统会把1.5转换成复数(这个复数是一个无名的对象,又系统自动生成),然后这个无名的复数对象和c2就能用操作的“+”运算符相加,并把值赋给c3.
比如说有:
Complex c2(1,5),c3;
c3=1.5+c2;
则处理1.5+c1时,系统发现和重载的函数
Complex operator+(Complex &c1,Complex &c2); 参数类型不匹配,身为左值的实数类型(这里是1.5)实参不能被转换为复数,编译时无法通过。
改成Complex operator+(const Complex &c1, const Complex &c2);后,系统会把1.5转换成复数(这个复数是一个无名的对象,又系统自动生成),然后这个无名的复数对象和c2就能用操作的“+”运算符相加,并把值赋给c3.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询