This exercise is designed to reinforce the concepts discussed in the lectures. There are no marks for completing this exercise, however your attendance at tutorials and successful completion is officially recorded and may be used as a positive adjunct to assessment in special circumstances.
You are strongly advised to compete the exercise as it will help you with the concepts discussed in lectures and assist you in successfully completing the practical work. Exercises often mysteriously reappear as exam questions.
Topic: Create a rational number class (this is trickier than it looks...)
Purpose: a chance to gain experience with operator overloading, default constructors, streams, and const objects.
Background: Rational numbers (fractions) are numbers that can be written in the form a/b, where a and b are integers and b != 0. a is known as the numerator and b the denominator. Rational numbers are useful for a number of applications in mathematics and computing.
Your task is to create a Rational class that represents rational numbers and allows rational objects to be created, added, subtracted and printed easily.
Here is a skeletal version of the class to start you off:
class Rational {
public:
Rational(int numerator = 0, int denominator = 1); // constructor for 2 ints
Rational(const Rational& r);
int getNumerator() const;
int getDenominator() const;
double asDouble() const; // returns (double)n/d
string asString() const; // returns "n/d" as a string
...
private:
int n, d;
};
How to Proceed:
Rational a(3), b(2,3), c, d;
c = a + b;
cout << a << " + " << b << " = "
<< c << endl; // should print 3/1 + 2/3 = 11/3
d = c – b;
cout << c << " –" << b << " =
" << d << endl; // should print 11/3 – 2/3 = 9/3
a = Rational(1,7); b = Rational(1,9);
cout << (a + b) << endl; // should print 16/63
if (a == b) cout << "a is equal to b" << endl;
if (a < b) cout << "a is less than b" << endl;
if (a > b) cout << "a is greater than b" << endl;
Rational r(3,12);
cout << r << endl; // prints 1/4
Hints/Questions:
+, –, ==, !=, <
,
and >
(also <=
and >=
if you
want to be complete).