-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathComplex.h
342 lines (292 loc) · 7.59 KB
/
Complex.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
/** Complex class to handle Complex numbers in a C++ code.
*
* #include "Complex.h" <BR>
* -llib
*
*/
#ifndef COMPLEX_H
#define COMPLEX_H
// SYSTEM INCLUDES
#include<iostream>
using std::string;
// Complex class definition
class Complex {
public:
// LIFECYCLE
/** Default + Overloaded constructor.
*/
Complex(double = 0.0, double = 0.0);
/** Type conversion constructor (string ==> Complex).
*/
Complex(const string&);
// Use compiler-generated copy constructor, assignment, and destructor.
// Complex(const Complex&);
// Complex& operator=(const Complex&);
// ~Complex();
// OPERATORS
/** Stream Insertion operator.
*
* @param rOs Standard Output Stream.
* @param rFrom The value to be inserted to the output stream.
*
* @return A reference to the standard output stream.
*/
friend std::ostream& operator <<(std::ostream& rOs, const Complex& rFrom);
/** Stream Extraction operator.
*
* @param rIs Standard Intput Stream.
* @param rTo The value to be extracted from the input stream.
*
* @return A reference to the standard input stream.
*/
friend std::istream& operator >>(std::istream& rIs, Complex& rTo);
// ADDITION
/** Addition operator.
*
* @param rhs A reference to rhs addend.
*
* @return Sum of two Complex Numbers.
*/
Complex operator +(const Complex& rhs);
/** Overloaded Addition operator.
*
* @param rhs Real(double) addend.
*
* @return Sum of Complex and real.
*/
Complex operator +(const double rhs);
/** Friend function to overloaded Addition operator.
*
* @param lhs Real(double) augend.
* @param rhs A reference to rhs addend.
*
* @return Sum of Real and Complex.
*/
friend Complex operator +(const double lhs, const Complex& rhs);
/** Addition assignment operator.
*
* @param rhs A reference to rhs addend.
*
* @return reference to (updated) current object.
*/
Complex& operator +=(const Complex& rhs);
/** Overloaded Addition assignment operator.
*
* @param rhs Real(double) addend.
*
* @return reference to (updated) current object.
*/
Complex& operator +=(const double rhs);
// SUBTRACTION
/** Subtraction operator.
*
* @param rhs A reference to rhs subtrahend.
*
* @return Difference of two Complex Numbers.
*/
Complex operator -(const Complex& rhs);
/** Overloaded Subtraction operator.
*
* @param rhs Real(double) subtrahend.
*
* @return Difference of real from Complex number.
*/
Complex operator -(const double rhs);
/** Friend function to overloaded Subtraction operator.
*
* @param lhs Real(double) minuend.
* @param rhs A reference to rhs subtrahend.
*
* @return Difference of Real and Complex.
*/
friend Complex operator -(const double lhs, const Complex& rhs);
/** Subtraction assignment operator.
*
* @param rhs A reference to rhs subtrahend.
*
* @return reference to (updated) current object.
*/
Complex& operator -=(const Complex& rhs);
/** Overloaded Subtraction assignment operator.
*
* @param rhs Real(double) subtrahend.
*
* @return reference to (updated) current object.
*/
Complex& operator -=(const double rhs);
// MULTIPLICATION
/** Multiplication operator.
*
* @param rhs A reference to rhs multiplier/factor.
*
* @return Product of two Complex Numbers.
*/
Complex operator *(const Complex& rhs);
/** Overloaded Multiplication operator.
*
* @param rhs Real(double) multiplier/factor.
*
* @return Product Complex and Real(double).
*/
Complex operator *(const double rhs);
/** Friend function to overloaded Multiplication operator.
*
* @param lhs Real(double) multiplicand/factor.
* @param rhs A reference to rhs multiplier/factor.
*
* @return Product Real(double) and Complex.
*/
friend Complex operator *(const double lhs, const Complex& rhs);
/** Multiplication assignment operator.
*
* @param rhs A reference to rhs multiplier/factor.
*
* @return reference to (updated) current object.
*/
Complex& operator *=(const Complex& rhs);
/** Overloaded Multiplication assignment operator.
*
* @param rhs Real(double) multiplier/factor.
*
* @return reference to (updated) current object.
*/
Complex& operator *=(const double rhs);
// DIVISION
// :KLUDGE: Saif 190123: possible division problem
// We need to revise division operator as it creates
// wrong output especially while cascading
// e.g. a/b/c/d != (a*d)/(b*c) ==> needs to be solved.
// for just 2 complex operands, it works fine. a/b :)
/** Division operator.
*
* @param rhs A reference to rhs divisor.
*
* @return Division of two Complex Numbers.
*/
Complex operator /(const Complex& rhs);
/** Overloaded Division operator.
*
* @param rhs Real(double) divisor.
*
* @return Division of Complex by Real(double).
*/
Complex operator /(const double rhs);
/** Friend function to overloaded Division operator.
*
* @param lhs Real(double) dividend.
* @param rhs A reference to rhs divisor.
*
* @return Division of Real(double) by Complex.
*/
friend Complex operator /(const double lhs, const Complex& rhs);
/** Division assignment operator.
*
* @param rhs A reference to rhs divisor.
*
* @return reference to (updated) current object.
*/
Complex& operator /=(const Complex& rhs);
/** Overloaded Division assignment operator.
*
* @param rhs Real(double) divisor.
*
* @return reference to (updated) current object.
*/
Complex& operator /=(const double rhs);
// EQUALITY
/** Equality operator.
*
* @param rhs A reference to rhs Complex.
*
* @return True if equal, false otherwise.
*/
bool operator ==(const Complex& rhs);
/** Non-Equality operator.
*
* @param rhs A reference to rhs Complex.
*
* @return True if not equal, false otherwise.
*/
bool operator !=(const Complex& rhs);
// UNARY OPERATORS
/** Negation operator.
*
* @param void.
*
* @return Negative of Complex Number.
*/
Complex operator -();
/** Conjugate operator.
*
* @param void.
*
* @return Conjugate of Complex Number.
*/
Complex operator *();
// INCREMENT OPERATOR
/** pre-increment operator.
*
* @param void.
*
* @return reference to (updated) current object.
*/
Complex& operator ++();
/** post-increment operator.
*
* @param dummy integer to overload increment operator.
*
* @return Incremented Complex Number.
*/
Complex operator ++(int);
// DECREMENT OPERATOR
/** pre-decrement operator.
*
* @param void.
*
* @return reference to (updated) current object.
*/
Complex& operator --();
/** post-decrement operator.
*
* @param dummy integer to overload decrement operator.
*
* @return Decremented Complex Number.
*/
Complex operator --(int);
/** Function operator to overload double
* This converts Complex number to real
*
* @param void.
*
* @return converted Real(double) equivalent.
*/
operator double();
// ACCESS
// setters
void SetReal(double = 0.0);
void SetImaginary(double = 0.0);
void SetComplex(double = 0.0, double = 0.0);
/**
# @overload void SetComplex(const Complex&);
*/
void SetComplex(const Complex&);
// getters
double GetReal()const;
double GetImaginary()const;
const Complex& GetComplex()const;
private:
// INQUIRY
/** utility function to check for leap year.
*
* @param testNumber The string to be tested for numbers.
*
* @return true if testNumber is numeric, false otherwise.
*/
bool Is_Number(const string& testNumber);
// DATA MEMBERS
double mReal;
double mImaginary;
};
// end class Complex
#endif
// _COMPLEX_H_