2. Continuous of question 1. Implement operator overloading.
Operator Overloading
a) Implement two unary operator overload functions (-,+,!).
b) Implement four arithmetic operator overload functions (+,-,*,/).
c) Implement six relational operator overload functions (==,!=,>,>=,<><=). d)="" implement="" the="" insertion="" operator="" overload="" function="">=).><>
e) Implement the extraction operator overload function (>>).
f) Implement the subscript operator overload function ([]).
Make sure that each function is optimally overloaded for its purpose. (pick between member, non-member, friend as appropriate)
Notes
Add Rational Numbers
Given a/b + c/d:
Step 1: Find the LCM of b and d.
Step 2: Create a new Rational Number: ((a*(LCM/b) + (c*(LCM/d)) / LCM. Step 3: Reduce the new Rational Number from step 2.
Step 4: Return the new Rational Number.
Subtract Rational Numbers
Given a/b - c/d:
Step 1: Find the LCM of b and d.
Step 2: Create a new Rational Number: ((a*(LCM/b) - (c*(LCM/d)) / LCM.
Step 3: Reduce the new Rational Number from step 2
Step 4: Return the new Rational Number.
Multiply Rational Numbers
Given a/b * c/d:
Step 1: Create a new Rational Number: (a*c) / (b*d).
Step 2: Return the new Rational Number.
Divide Rational Numbers
Given a/b / c/d:
Step 1: Create a new Rational Number: (a*d) / (b*c).
Step 2: Return the new Rational Number.
Compare Rational Numbers: greater than
Determine if a/b > c/d:
Step 1: Find the LCM of b and d.
Step 2: If (a* (LCM/b) > (c* (LCM/d) return true, otherwise false.
Compare Rational Numbers: less than
Determine if a/b <>
Step 1: Find the LCM of b and d
Step 2: If (a*(LCM/b) < (c*="" (lcm/d)="" return="" true,="" otherwise="">
Use following main function to test your program.
(have to use this main function)
int main ~
cout <>
RatNum r1(1,2), r2(1,6), r3(2,5);
// test operator overloads
cout < "\ninput/output="" stream="" operators:="" "=""><>
RatNum r4;
cout < "enter="" a="" rational="" number:="">
cin >> r4:
cout < r4=""><>
cout < "negation="" operation:="" "=""><>
cout <-r4>-r4><>
// test arithmetic overloads
cout < "\narithmetic="" operators:=""><>
RatNum r5 = r1 + r2;
cout < r1=""><"+>"+>< r2="">< "="'<< r5 << endI;
RatNum r6 = r1 - r2;
cout << r1 <<">< r2="">< "="«< r6 << endi:
RatNum r7 =r1 * r2l;
cout << r1 <<">< r2="">< "=" << r7 << endI;
RatNum r8 = r1 / r2;
cout<<>< "="<
// test arithmetic operation chaining
cout << " \narithmetic="" chaining:="" "=""><>
RatNum r9 = r5 + r6 - r7 * r8;
cout<><><><><><><><><><>
// test relational operator overload
cout < "\nrelational="" operators:="" "=""><>
cout < r5="">< "="=" "="">< r6="">< "?="" "="">< (r5="=r6)">< endl;="" cout="">< r5="">< "="" !=" << r6 << " "="">< (r5!="r6)">< endl;="" cout="">< r5="">< "=""> " < r6="">< "?="" "="">< (r5="">r6) < endl;="" cout="">< r5="">< "="">< "="">< r6="">< "?="" "=""><><>
// test subscript overload
cout < "\nsubscript="" operator:="" "=""><>
cout < r5="">< "="" num=" << r5[1] << " den=" << r5[2] << endl; cout << endl;
return 0;
Extracted text: Output Example Input/Output Stream Operators: Enter a rational number: 1 2 1/2 Negation Operation: -1/2 Arithmetic Operators: 1/2 + 1/6 = 2/3 1/2 1/2 * 1/6 = 1/12 1/2 / 1/6 = 3/1 %3D 1/6 = 1/3 %3D %3D Arithmetic Chaining: 2/3 + 1/3 - 1/12 * 3/1 = 3/4 Relational Operators: 2/3 == 1/3? 0 2/3 != 1/3? 1 2/3 > 1/3? 1 2/3 < 1/3? 0 subscript operator: 2/3 num=2 den=3 1/3?="" 0="" subscript="" operator:="" 2/3="" num="2" den=""> 1/3? 0 subscript operator: 2/3 num=2 den=3>