+ - * / += -= *= /= >> <<
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 }
posted on 2011-04-21 23:46
unixfy 阅读(188)
评论(0) 编辑 收藏 引用