#include <iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
Complex operator-();
friend Complex operator+(Complex &c1, Complex &c2);
friend Complex operator-(Complex &c1, Complex &c2);
friend Complex operator*(Complex &c1, Complex &c2);
friend Complex operator/(Complex &c1, Complex &c2);
friend Complex operator+(Complex &c1, double d);
friend Complex operator-(Complex &c1, double d);
friend Complex operator*(Complex &c1, double d);
friend Complex operator/(Complex &c1, double d);
friend Complex operator+(double d, Complex &c2);
friend Complex operator-(double d, Complex &c2);
friend Complex operator*(double d, Complex &c2);
friend Complex operator/(double d, Complex &c2);
void display();
private:
double real;
double imag;
};
#include <iostream>
using namespace std;
#include "fushu2.h"
Complex Complex::operator-()
{
return (0-*this);///this代表当前对象
}
Complex operator+(Complex &c1,Complex &c2)
{
Complex c;
c.real=c1.real+c2.real;
c.imag=c1.imag+c2.imag;
return c;
}
//复数相减:(a+bi)-(c+di)=(a-c)+(b-d)i.
Complex operator-(Complex &c1,Complex &c2)
{
Complex c;
c.real=c1.real-c2.real;
c.imag=c1.imag-c2.imag;
return c;
}
//复数相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i.
Complex operator*(Complex &c1,Complex &c2)
{
Complex c;
c.real=c1.real*c2.real-c1.imag*c2.imag;
c.imag=c1.imag*c2.real+c1.real*c2.imag;
return c;
}
//复数相除:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i
Complex operator/(Complex &c1,Complex &c2)
{
Complex c;
c.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
c.imag=(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);
return c;
}
//复数相加:(a+bi)+(c+di)=(a+c)+(b+d)i.
Complex operator+(Complex &c1,double d)
{
Complex n(d,0);
return c1+n;
}
//复数相减:(a+bi)-(c+di)=(a-c)+(b-d)i.
Complex operator-(Complex &c1, double d)
{
Complex n(d,0);
return c1-n;
}
//复数相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i.
Complex operator*(Complex &c1,double d)
{
Complex n(d,0);
;
return c1*n;
}
//复数相除:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i
Complex operator/(Complex &c1,double d)
{
Complex n(d,0);
return c1/n;
}
Complex operator+(double d,Complex &c1)
{
Complex n(d,0);
return n+c1;
}
//复数相减:(a+bi)-(c+di)=(a-c)+(b-d)i.
Complex operator-(double d,Complex &c1)
{
Complex n(d,0);
return n-c1;
}
//复数相乘:(a+bi)(c+di)=(ac-bd)+(bc+ad)i.
Complex operator*(double d,Complex &c1)
{
Complex n(d,0);
return n*c1;
}
//复数相除:(a+bi)/(c+di)=(ac+bd)/(c^2+d^2) +(bc-ad)/(c^2+d^2)i
Complex operator/(double d,Complex &c1)
{
Complex n(d,0);
return n/c1;
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
Complex c1(3,4),c2(5,-10),c3;
double d=11;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
cout<<"d+c2=";
(d+c2).display();
cout<<"c2+d=";
(c2+d).display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
cout<<"c2-d";
(c2-d).display();
cout<<"d-c2";
(d-c2).display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
cout<<"d*c2=";
(d*c2).display();
cout<<"c1*d=";
(c1*d).display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
cout<<"d/c2";
(d/c2).display();
cout<<"c2/d";
(c2/d).display();
system("pause");
return 0;
}
感悟:1.一定要看清题目 的要求,如对复数的乘积和商 的运算。
2.。注意this的含义,即指的是当前的对象,以后直接用就行,不要再分别考虑this代表的具体对象,这样会更加简便易懂。
3.注意函数对象运算顺序一定要和参数对应,不能颠倒过来。