运算符重载,关于交换律的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 08:45:49
定义一个复数类Complex
重载运算符"+",使之能用于求复数加法运算。
参加运算的两个运算量可以都是类对象,也可以其中一个是整数,
一个是类对象,顺序任意,
如,int i;Complex c1,c2;
c1+c2;
c1+i;
i+c1;
均合法,
此题为(C++面向对象程序设计,谭浩强)的第四章习题的经三题,
由于没买到答案,这个好像是说重载后,+,这个运算的交换律也适用,
因此,上面的题要求只重载一次+能实现那些功能,而且,书上我记得也说过,二目运算一般做友元来重载,交换律适用是其一,而当成员函数重载就不适合交换律,但是,我一直没弄明白这块怎么个交换法,写了好几个,都不适合交换律,所以,请哪位了解这块的,举一个例子来说明一下,最好是我上面的题目,当然如果不是也可以,有必要的说明,本人才开始学,太深的怕看不懂。谢谢了。

#include <iostream>
using namespace std;
class Complex{
int real;
int imag;
public:
Complex(){real=0;imag=0;}
Complex(int r){real=r;imag=0;}
Complex(int r,int i):real(r),imag(i){}
friend Complex operator +(Complex ,Complex );
friend ostream &operator<<(ostream &,Complex &);
};
Complex operator +(Complex a,Complex b){
return Complex(a.real+b.real,a.imag+b.imag);
}
ostream & operator <<(ostream & out,Complex & c){
out<<c.real<<"+"<<c.imag<<"i";
return out;
}
int main(){
Complex c1(3,5),c2(6,6),c3;
int d=34;
int m;
c3=d+c1;
cout<<c3<<endl;
system("pause");
return 0;
}

#include<iostream.h>
class complex
{
public:
complex()
{real=imag=0.0;}
complex(double r)
{real=r;imag=0.0;}
complex(double r,double i)
{