⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch6.1.cc

📁 C++ source code for book-C++ and Object Oriented Numeric computing for scientists and engineers
💻 CC
字号:
#include <iostream>
#include <cmath>

class Cmpx {      // class for complex numbers
private:
  double re;      // real part of a complex number
  double im;      // imaginal part of a complex number
public:
  Cmpx(double x = 0, double y = 0) { re =x; im =y; }  // constructor
  Cmpx& operator+=(Cmpx);                          // operator +=, eg z1 +=  z2
  Cmpx& operator-=(Cmpx);                          // operator -=, eg z1 -=  z2
  Cmpx& operator++();                              // prefix,  z1 = ++z
  Cmpx operator++(int);                            // postfix, z1 =  z++

//  Cmpx operator-();                                // operator -, eg z1 = - z2
//  Cmpx operator+();                                // operator +, eg z1 = + z2
//  Cmpx operator-(Cmpx);                            // binary -, eg z = z1 - z2
//  Cmpx operator+(Cmpx);                            // binary +, eg z = z1 + z2

  friend Cmpx operator*(Cmpx, Cmpx);               // binary *, z = z1 * z2
  friend std::ostream& operator<<(std::ostream&, Cmpx);      // operator <<
  friend std::istream& operator>>(std::istream&, Cmpx&);     // operator >> 
};

// these operators can also be conveniently defined as functions.
Cmpx operator+(Cmpx);                   // unary +, eg z1 = + z2
Cmpx operator-(Cmpx);                   // unary -, eg z1 = - z2
Cmpx operator+(Cmpx, Cmpx);             // binary +, z = z1 + z2
Cmpx operator-(Cmpx, Cmpx);             // binary -, z = z1 - z2

// ***********  definitions of Cmpx
inline Cmpx& Cmpx::operator++() {        // ++z
  re++;
  im++;
  return *this;
}

inline Cmpx Cmpx::operator++(int i) {   // z++
  Cmpx temp = *this;
  re++;
  im++;
  return temp;
}


inline Cmpx operator+(Cmpx z) {
  return z;
}

inline Cmpx operator-(Cmpx z) {
  return 0 - z;
}

/*
inline Cmpx Cmpx::operator+() {
  return *this;
}

inline Cmpx Cmpx::operator-() {
  return Cmpx(- re, - im);
}
*/

Cmpx& Cmpx::operator+=(Cmpx z) {
  re += z.re;
  im += z.im;
  return *this;
}

Cmpx& Cmpx::operator-=(Cmpx z) {
  re -= z.re;
  im -= z.im;
  return *this;
}

/*
Cmpx Cmpx::operator+(Cmpx z) {                  // binary +, member fcn
//  Cmpx temp = *this;
//  return temp += z;
  return z += *this;
}

Cmpx Cmpx::operator-(Cmpx z) {                  // binary -, member fcn
  Cmpx temp = *this;
  return temp -= z;
}
*/


Cmpx operator+(Cmpx a, Cmpx b) {                  // binary +, eg z = z1 + z2
  return a += b;  
}

Cmpx operator-(Cmpx a, Cmpx b) {                  // binary -, eg z = z1 - z2
  return a -= b;  
}

Cmpx operator*(Cmpx a, Cmpx b) {                  // binary *, eg z = z1 * z2
  return Cmpx(a.re*b.re - a.im*b.im, a.re*b.im + a.im*b.re);  
}

std::ostream& operator<<(std::ostream& s, Cmpx z) {
  s << "(" << z.re << ", " << z.im << ")";
  return s;
}

std::istream& operator>>(std::istream& s, Cmpx& z) {
  s >> z.re >> z.im;
  return s;
}

main() {
  Cmpx a(1,1);
  Cmpx b = a;
  b = a + 10;
  std::cout << "a = " << a << "\n";
  Cmpx c = a + b;
  std::cout << "a = " << a << "\n";
  std::cout << "c = " << c << "\n";
  c -=  b;
  std::cout << "c = " << c << "\n";
  c = b;
  c = + b;
  c = a + b*c;
  std::cout << "c = " << c << "\n";

  Cmpx d;
  std::cout << "type two numbers\n";
  std::cin >> d;
  std::cout << "d = " << d << "\n";
  Cmpx e(3.0);
  std::cout << e << "\n";

  Cmpx f = + e;
  std::cout << f << "\n";
  Cmpx g = - e;
  std::cout << g << "\n";

  Cmpx aa = Cmpx(5, 0);
  Cmpx bb = ++aa;
  Cmpx cc = aa++;
  std::cout << "bb = " << bb << "\n";
  std::cout << "cc = " << cc << "\n";
  std::cout << "aa = " << aa << "\n";
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -