-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRationalNumber.h
373 lines (321 loc) · 8.43 KB
/
RationalNumber.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
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
/** RationalNumber class to handle rational numbers in a C++ code.
*
* #include "RationalNumber.h" <BR>
* -llib
*
*/
#ifndef RATIONAL_NUMBER_H
#define RATIONAL_NUMBER_H
// SYSTEM INCLUDES
#include<iostream>
// RationalNumber class definition
class RationalNumber {
public:
// LIFECYCLE
/** Default + Overloaded constructor.
*/
RationalNumber(int = 0, int = 1);
/** Float Conversion constructor.
*/
RationalNumber(float);
// Use compiler-generated copy constructor, assignment, and destructor.
// RationalNumber(const RationalNumber&);
// RationalNumber& operator=(const RationalNumber&);
// ~RationalNumber();
// 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 RationalNumber& 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, RationalNumber& rTo);
// ADDITION
/** Addition operator.
*
* @param rhs A reference to rhs addend.
*
* @return Sum of two Rational Numbers.
*/
RationalNumber operator +(const RationalNumber& rhs);
/** Overloaded Addition operator.
*
* @param rhs Integer addend.
*
* @return Sum of Rational and integer.
*/
RationalNumber operator +(const int rhs);
/** Friend function to overloaded Addition operator.
*
* @param lhs Integer augend.
* @param rhs A reference to rhs addend.
*
* @return Sum of integer and rational.
*/
friend RationalNumber operator +(const int lhs, const RationalNumber& rhs);
/** Addition assignment operator.
*
* @param rhs A reference to rhs addend.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator +=(const RationalNumber& rhs);
/** Overloaded Addition assignment operator.
*
* @param rhs Integer addend.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator +=(const int rhs);
// SUBTRACTION
/** Subtraction operator.
*
* @param rhs A reference to rhs subtrahend.
*
* @return Difference of two Rational Numbers.
*/
RationalNumber operator -(const RationalNumber& rhs);
/** Overloaded Subtraction operator.
*
* @param rhs Integer subtrahend.
*
* @return Difference of integer from Rational.
*/
RationalNumber operator -(const int rhs);
/** Friend function to overloaded Subtraction operator.
*
* @param lhs Integer minuend.
* @param rhs A reference to rhs subtrahend.
*
* @return Difference of Rational from integer.
*/
friend RationalNumber operator -(const int lhs, const RationalNumber& rhs);
/** Subtraction assignment operator.
*
* @param rhs A reference to rhs subtrahend.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator -=(const RationalNumber& rhs);
/** Overloaded Subtraction assignment operator.
*
* @param rhs Integer subtrahend.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator -=(const int rhs);
// MULTIPLICATION
/** Multiplication operator.
*
* @param rhs A reference to rhs multiplier/factor.
*
* @return Product of two Rational Numbers.
*/
RationalNumber operator *(const RationalNumber& rhs);
/** Overloaded Multiplication operator.
*
* @param rhs Integer multiplier/factor.
*
* @return Product Rational and Integer.
*/
RationalNumber operator *(const int rhs);
/** Friend function to overloaded Multiplication operator.
*
* @param lhs Integer multiplicand/factor.
* @param rhs A reference to rhs multiplier/factor.
*
* @return Product Integer and Rational.
*/
friend RationalNumber operator *(const int lhs, const RationalNumber& rhs);
/** Multiplication assignment operator.
*
* @param rhs A reference to rhs multiplier/factor.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator *=(const RationalNumber& rhs);
/** Overloaded Multiplication assignment operator.
*
* @param rhs Integer multiplier/factor.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator *=(const int rhs);
// DIVISION
/** Division operator.
*
* @param rhs A reference to rhs divisor.
*
* @return Division of two Rational Numbers.
*/
RationalNumber operator /(const RationalNumber& rhs);
/** Overloaded Division operator.
*
* @param rhs Integer divisor.
*
* @return Division of Rational by Integer.
*/
RationalNumber operator /(const int rhs);
/** Friend function to overloaded Division operator.
*
* @param lhs Integer dividend.
* @param rhs A reference to rhs divisor.
*
* @return Division of Integer by Rational.
*/
friend RationalNumber operator /(const int lhs, const RationalNumber& rhs);
/** Division assignment operator.
*
* @param rhs A reference to rhs divisor.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator /=(const RationalNumber& rhs);
/** Overloaded Division assignment operator.
*
* @param rhs Integer divisor.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator /=(const int rhs);
// EQUALITY
/** Equality operator.
*
* @param rhs A reference to rhs Rational.
*
* @return True if equal, false otherwise.
*/
bool operator == (const RationalNumber& rhs);
/** Non-Equality operator.
*
* @param rhs A reference to rhs Rational.
*
* @return True if not equal, false otherwise.
*/
bool operator != (const RationalNumber& rhs);
/** Less than operator.
*
* @param rhs A reference to rhs Rational.
*
* @return True if less than rhs, false otherwise.
*/
bool operator < (const RationalNumber& rhs);
/** Greater than operator.
*
* @param rhs A reference to rhs Rational.
*
* @return True if greater than rhs, false otherwise.
*/
bool operator > (const RationalNumber& rhs);
/** Less than or equal to operator.
*
* @param rhs A reference to rhs Rational.
*
* @return True if less than or equal to rhs, false otherwise.
*/
bool operator <= (const RationalNumber& rhs);
/** Greater than or equal to operator.
*
* @param rhs A reference to rhs Rational.
*
* @return True if greater than or equal to rhs, false otherwise.
*/
bool operator >= (const RationalNumber& rhs);
// UNARY OPERATORS
/** Negation operator.
*
* @param void.
*
* @return Negative of Rational Number.
*/
RationalNumber operator -();
// INCREMENT OPERATOR
/** pre-increment operator.
*
* @param void.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator ++();
/** post-increment operator.
*
* @param dummy integer to overload increment operator.
*
* @return Incremented Rational Number.
*/
RationalNumber operator ++(int);
// DECREMENT OPERATOR
/** pre-decrement operator.
*
* @param void.
*
* @return reference to (updated) current object.
*/
RationalNumber& operator --();
/** post-decrement operator.
*
* @param dummy integer to overload decrement operator.
*
* @return Decremented Rational Number.
*/
RationalNumber operator --(int);
/** Function operator to overload float
* This converts rational number to float
*
* @param void.
*
* @return converted float equivalent.
*/
operator float();
// OPERATIONS
/** Prints Rational number in fraction(a/b) form.
*
* @param void.
*
* @return void.
*/
void PrintFraction()const;
/** Prints Rational number in floating-point(a.b) form.
*
* @param void.
*
* @return void.
*/
void PrintFloat()const;
// ACCESS
// setters
void SetNumerator(int = 0);
void SetDenominator(int = 1);
void SetRationalNumber(int = 0, int = 1);
/**
# @overload void SetRationalNumber(const RationalNumber&);
*/
void SetRationalNumber(const RationalNumber&);
// getters
int GetNumerator()const;
int GetDenominator()const;
const RationalNumber& GetRationalNumber()const;
private:
/** utility function that converts the rational into reduced form.
*
* @param void.
*
* @return void.
*/
void ReducedForm();
// DATA MEMBERS
int mNumerator;
int mDenominator;
};
// end class RationalNumber
#endif
// _RATIONAL_NUMBER_H_