// Lab3 Ans: Expected Outputs // 1/3 + 3/4 = 13/12 // 1/3 - 3/4 = -5/12 // 1/3 * 3/4 = 3/12 // 1/3 / 3/4 = 4/9 // 1/3 < 3/4 ? 1 #include class Fraction { private: int numer; int denom; public: Fraction() { numer = 0; denom = 1; } Fraction(int n, int d) { numer = n; denom = d; } friend istream& operator >> (istream& ins, Fraction& target) // BC 5.1 and MS Visual C++ works fine ^ // Borland C++ Builder 4: Remove | { cout << "Enter numerator and denominator for a fraction: "; ins >> target.numer >> target.denom; return ins; } friend ostream& operator << (ostream& outs, Fraction& source) { outs << source.numer << "/"; outs << source.denom; return outs; } Fraction add(Fraction); Fraction operator + (Fraction); // notice that this is mf friend Fraction operator - (Fraction, Fraction); friend Fraction operator * (Fraction, Fraction); friend Fraction operator / (Fraction, Fraction); friend bool operator < (Fraction, Fraction); }; Fraction Fraction::add(Fraction given) { Fraction temp; temp.numer = numer*given.denom + denom*given.numer; temp.denom = denom*given.denom; return temp; } Fraction Fraction::operator + (Fraction fr) // one line body please! { return add(fr); } Fraction operator - (Fraction f1, Fraction f2) { Fraction temp; temp.numer = f1.numer*f2.denom - f1.denom*f2.numer; temp.denom = f1.denom*f2.denom; return temp; } Fraction operator * (Fraction f1, Fraction f2) { Fraction temp; temp.numer = f1.numer*f2.numer; temp.denom = f1.denom*f2.denom; return temp; } Fraction operator / (Fraction f1, Fraction f2) { Fraction temp; temp.numer = f1.numer*f2.denom; temp.denom = f1.denom*f2.numer; return temp; } bool operator < (Fraction f1, Fraction f2) // less than { double t1 = /* (double) */ f1.numer / f1.denom; // need cast double t2 = /* (double) */ f2.numer / f2.denom; // need cast return (t1 < t2); } void main () { Fraction frac1(1,3), frac2(3,4); cout << frac1 << " + " << frac2 << " = " << (frac1 + frac2) << endl; cout << frac1 << " - " << frac2 << " = " << (frac1 - frac2) << endl; cout << frac1 << " * " << frac2 << " = " << (frac1 * frac2) << endl; cout << frac1 << " / " << frac2 << " = " << (frac1 / frac2) << endl; cout << frac1 << " < " << frac2 << " ? " << (frac1 < frac2) << endl; }