第九周任务1

来源:互联网 发布:use衣服知乎 编辑:程序博客网 时间:2024/05/16 17:37
/* (程序头部注释开始)     02.* 程序的版权和版本声明部分     03.* Copyright (c) 2011, 烟台大学计算机学院学生      04.* All rights reserved.     05.* 文件名称:     06.     07.* 作    者:        王明星                     08.* 完成日期:     2012    年4     月    8  日     09.* 版 本 号:            10.* 对任务及求解方法的描述部分     11.* 输入描述:      12.* 问题描述:      13.* 程序输出:      14.* 程序头部的注释结束     15.*/     #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 ostream& operator << (ostream& output,Complex& c);      friend istream& operator >> (istream& input,Complex& c);      //实现加减乘除的运算符重载       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);  private:      double real;      double imag;  };    //实现输出的运算符重载   ostream& operator << (ostream& output,Complex& c)  {   output<<"("<<c.real;      if(c.imag>=0) output<<"+";        output<<c.imag<<"i)";          return output;  }    //实现输入的运算符重载   istream& operator >> (istream& input,Complex& c)  {   int a,b;      char sign,i;      do      {   cout<<"input a complex number(a+bi或a-bi):";          input>>a>>sign>>b>>i;      }      while(!((sign=='+'||sign=='-')&&i=='i'));      c.real=a;      c.imag=(sign=='+')?b:-b;      return input;  }      Complex Complex::operator-()  {      return(0-*this);  }    //复数相加:(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;  }  Complex operator+(double d1, Complex &c2)  {      Complex c(d1,0);      return c+c2; //按运算法则计算的确可以,但充分利用已经定义好的代码,既省人力,也避免引入新的错误,但可能机器的效率会不佳   }  Complex operator+(Complex &c1, double d2)  {      Complex c(d2,0);      return c1+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;  }  Complex operator-(double d1, Complex &c2)  {      Complex c(d1,0);      return c-c2;    }  Complex operator-(Complex &c1, double d2)  {      Complex c(d2,0);      return c1-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;  }  Complex operator*(double d1, Complex &c2)  {      Complex c(d1,0);      return c*c2;  }  Complex operator*(Complex &c1, double d2)  {      Complex c(d2,0);      return c1*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;  }  Complex operator/(double d1, Complex &c2)  {      Complex c(d1,0);      return c/c2;  }    Complex operator/(Complex &c1, double d2)  {      Complex c(d2,0);      return c1/c;  }    int main()  {      Complex c1,c2,c3;      double d=11;      cout<<"c1: "<<endl;;       cin>>c1;                cout<<"c2: "<<endl;      cin>>c2;      cout<<"c1="<<c1<<endl;      cout<<"c2="<<c2<<endl;      cout<<"d="<<d<<endl;      cout<<"-c1="<<(-c1);      c3=c1+c2;      cout<<"c1+c2="<<c3<<endl;      cout<<"c1+d="<<(c1+d)<<endl;      cout<<"d+c1="<<(d+c1)<<endl;      c3=c1-c2;      cout<<"c1-c2="<<c3<<endl;      cout<<"c1-d="<<(c1-d)<<endl;      cout<<"d-c1="<<(d-c1)<<endl;      c3=c1*c2;      cout<<"c1*c2="<<c3<<endl;      cout<<"c1*d="<<(c1*d)<<endl;      cout<<"d*c1="<<(d*c1)<<endl;      c3=c1/c2;      cout<<"c1/c2="<<c3<<endl;      cout<<"c1/d="<<(c1/d)<<endl;      cout<<"d/c1="<<(d/c1)<<endl;        system("pause");      return 0;  }  
上机感言:对“<<",">>"的重载使我们的是输入和输出更加直观了!!