复数类运算符重载

复数类运算符重载

+ - * / += -= *= /= >> <<

  1  #include  < iostream >
  2  using   namespace  std;
  3 
  4  class  Complex
  5  {
  6  private :
  7       double  real;
  8       double  image;
  9  public :
 10      Complex( double  r  =   0.0 double  i  =   0.0 ) : real(r), image(i) {}
 11      Complex( const  Complex &  c)
 12      {
 13          real  =  c.real;
 14          image  =  c.image;
 15      }
 16       ~ Complex() {}
 17      Complex &   operator = ( const  Complex &  c)
 18      {
 19           if  ( this   !=   & c)
 20          {
 21              real  =  c.real;
 22              image  =  c.image;
 23          }
 24           return   * this ;
 25      }
 26      Complex &   operator += ( const  Complex &  c)
 27      {
 28          real  +=  c.real;
 29          image  +=  c.image;
 30           return   * this ;
 31      }
 32      Complex &   operator -= ( const  Complex &  c)
 33      {
 34          real  -=  c.real;
 35          image  -=  c.image;
 36           return   * this ;
 37      }
 38      Complex &   operator *= ( const  Complex &  c)
 39      {
 40           double  r2  =  real, i2  =  image;
 41          real  =  r2  *  c.real  -  i2  *  c.image;
 42          image  =  r2  *  c.image  +  i2  *  c.real;
 43           return   * this ;
 44      }
 45      Complex &   operator /= ( const  Complex &  c)
 46      {
 47           double  r2  =  real, i2  =  image;
 48          real  =  (r2  *  c.real  +  i2  *  c.image)  /  (c.real  *  c.real  +  c.image  *  c.image);
 49          image  =  (i2  *  c.real  -  r2  *  c.image)  /  (c.real  *  c.real  +  c.image  *  c.image);
 50           return   * this ;
 51      }
 52      friend Complex  operator + ( const  Complex &  c1,  const  Complex &  c2);
 53      friend Complex  operator - ( const  Complex &  c1,  const  Complex &  c2);
 54      friend Complex  operator * ( const  Complex &  c1,  const  Complex &  c2);
 55      friend Complex  operator / ( const  Complex &  c1,  const  Complex &  c2);
 56      friend istream &   operator >> (istream &   in , Complex &  c);
 57      friend ostream &   operator << (ostream &   out const  Complex &  c);
 58  };
 59 
 60  Complex  operator + ( const  Complex &  c1,  const  Complex &  c2)
 61  {
 62      Complex t(c1);
 63       return  t  +=  c2;
 64  }
 65 
 66  Complex  operator - ( const  Complex &  c1,  const  Complex &  c2)
 67  {
 68      Complex t(c1);
 69       return  t  -=  c2;
 70  }
 71 
 72  Complex  operator * ( const  Complex &  c1,  const  Complex &  c2)
 73  {
 74      Complex t(c1);
 75       return  t  *=  c2;
 76  }
 77 
 78  Complex  operator / ( const  Complex &  c1,  const  Complex &  c2)
 79  {
 80      Complex t(c1);
 81       return  t  /=  c2;
 82  }
 83 
 84  istream &   operator >> (istream &   in , Complex &  c)
 85  {
 86       in   >>  c.real  >>  c.image;
 87       if  ( ! in )
 88      {
 89          cerr  <<   " Input error! "   <<  endl;
 90          exit( 1 );
 91      }
 92       return   in ;
 93  }
 94 
 95  ostream &   operator << (ostream &   out const  Complex &  c)
 96  {
 97       out   <<  c.real  <<   ' + '   <<  c.image  <<   ' i ' ;
 98       return   out ;
 99  }
100 
101  int  main()
102  {
103      Complex c1( 1.0 2.0 ), c2( 3.0 4.0 );
104      cout  <<  c1  <<  endl;
105      cout  <<  c2  <<  endl;
106      cout  <<  c1  +  c2  <<  endl;
107      cout  <<  c1  -  c2  <<  endl;
108      cout  <<  c1  *  c2  <<  endl;
109      cout  <<  c1  /  c2  <<  endl;
110 
111      Complex c3( 5.0 6.0 ), c4( 7.0 8.0 );
112      c1  +=  c2  +=  c3  +=  c4;
113      cout  <<  c1  <<  endl;
114      cout  <<  c2  <<  endl;
115      cout  <<  c3  <<  endl;
116      cout  <<  c4  <<  endl;
117       return   0 ;
118  }

你可能感兴趣的:(复数类运算符重载)