//
2.*Copyright(c) 2016.烟台大学计算机与控制工程学院
3.*ALL rights reserved.
4.*文件名称:main.cpp
5.*作者:孙亚茹
6.*完成日期:2016年5月26日
7.*问题描述:定义一个完整的类复数重载运算符+,-,*,/,在(2)de 基础上使之与double型数据用于复数的加减乘除。
8.*//
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r; imag=i;}
friend Complex operator+(Complex &c1, Complex &c2);
friend Complex operator+(double d1, Complex &c2);
friend Complex operator+(Complex &c1, double d2);
friend Complex operator-(Complex &c1, Complex &c2);
friend Complex operator-(double d1, Complex &c2);
friend Complex operator-(Complex &c1, double d2);
friend Complex operator*(Complex &c1, Complex &c2);
friend Complex operator*(double d1, Complex &c2);
friend Complex operator*(Complex &c1, double d2);
friend Complex operator/(Complex &c1, Complex &c2);
friend Complex operator/(double d1, Complex &c2);
friend Complex operator/(Complex &c1, double d2);
void display();
private:
double real;
double imag;
};
//下面定义成员函数
Complex operator+(Complex &c1, Complex &c2)
{
Complex c;
c.real=c1.real+c2.real;
c.imag=c1.imag+c2.imag;
return c;
}
Complex operator+(Complex &c1,double d2)
{
Complex c0;
c0.real=c1.real+d2;
c0.imag=c1.imag;
return c0;
}
Complex operator+(double d1, Complex &c2)
{
Complex c0;
c0.real=d1+c2.real;
c0.imag=c2.imag;
return c0;
}
Complex operator-(Complex &c1, Complex &c2)
{
Complex c;
c.real=c1.real-c2.real;
c.imag=c1.imag-c2.imag;
return c;
}
Complex operator-(Complex &c1,double d2)
{
Complex c0;
c0.real=c1.real-d2;
c0.imag=c1.imag;
return c0;
}
Complex operator-(double d1, Complex &c2)
{
Complex c0;
c0.real=d1-c2.real;
c0.imag=-c2.imag;
return c0;
}
Complex operator*(Complex &c1, Complex &c2)
{
Complex c;
c.real=c1.real*c2.real;
c.imag=c1.imag*c2.imag;
return c;
}
Complex operator*(Complex &c1,double d2)
{
Complex c0;
c0.real=c1.real*d2;
c0.imag=0;
return c0;
}
Complex operator*(double d1, Complex &c2)
{
Complex c0;
c0.real=d1*c2.real;
c0.imag=0;
return c0;
}
Complex operator/(Complex &c1, Complex &c2)
{
Complex c;
c.real=c1.real/c2.real;
c.imag=c1.imag/c2.imag;
return c;
}
Complex operator/(Complex &c1,double d2)
{
Complex c0;
c0.real=c1.real/d2;
c0.imag=c1.imag/0;
return c0;
}
Complex operator/(double d1, Complex &c2)
{
Complex c0;
c0.real=d1/c2.real;
c0.imag=0/c2.imag;
return c0;
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
//下面定义用于测试的main()函数
int main()
{
Complex c1(3,4),c2(5,-10),c3;
double d=11;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
cout<<"d="<<d<<endl;
cout<<"运算符重载结果为:"<<endl;
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c3=d+c2;
cout<<"d+c2=";
c3.display();
c3=c1+d;
cout<<"c1+d=";
c3.display();
c3=c1-c2;
cout<<"c1-c2=";
c3.display();
c3=d-c2;
cout<<"d-c2=";
c3.display();
c3=c1-d;
cout<<"c1-d=";
c3.display();
c3=c1*c2;
cout<<"c1*c2=";
c3.display();
c3=d*c2;
cout<<"d*c2=";
c3.display();
c3=c1*d;
cout<<"c1*d=";
c3.display();
c3=c1/c2;
cout<<"c1/c2=";
c3.display();
c3=d/c2;
cout<<"d/c2=";
c3.display();
c3=c1/d;
cout<<"c1/d=";
c3.display();
return 0;
}
总结:
运算符重载中形参前后顺序不同,结果不同,不能当成一样来使用。
普通变量为前面那个参数时没有成员函数,因此最好用友元函数。