// Lesson 4 files // Andrew Fountain http://quadruple.ca // // fraction.h #include using namespace std; class Fraction { private: double num; // Numerator double den; // Denominator public: Fraction() : num(0), den(1) {} Fraction(double nn, double dd) : num(nn), den(dd) {} double getnum(void) { return num; } double getden(void) { return den; } }; Fraction operator+ (Fraction& a, Fraction& b) { Fraction sum; sum.num = (a.num*b.den) + (a.den*b.num); sum.den = (a.den*b.den); return sum; } // fraction.cpp #include "fraction.h" int main(int argc, char *argv[]) { Fraction a(1,8); Fraction b=a+a; cout << "Fraction b = " << b.getnum() << "/" << b.getden() << endl; } //--------------------------------------------MODIFIED //needs to be added to class to make it work: friend Fraction operator+ (Fraction& a, Fraction& b); Fraction reduced (void) { int gcd; // Greatest Common Denominator int tempn = abs(num); int tempd = abs(den); for (int k=1; k<=tempn; k++) if (((tempn % k)==0) && ((tempd % k)==0)) gcd = k; return Fraction(num/gcd, den/gcd); } //and change last line of operator+ to: return sum.reduced(); friend ostream& operator<< (ostream& o, Fraction& f) { o << f.num << "/" << f.den; return o; } cout << "Fraction b = " << b << endl; /////////////////////////////////////////////////////////////////////////// // fraction.h exercise #include using namespace std; class Fraction { private: double num; // Numerator double den; // Denominator public: Fraction() : num(0), den(1) {} Fraction(double nn, double dd) : num(nn), den(dd) {} double getnum(void) { return num; } double getden(void) { return den; } friend Fraction operator+ (Fraction& a, Fraction& b); friend Fraction operator- (Fraction& a, Fraction& b); friend Fraction operator* (Fraction& a, Fraction& b); friend Fraction operator/ (Fraction& a, Fraction& b); Fraction reduced (void) { int gcd; // Greatest Common Denominator int tempn = abs(num); int tempd = abs(den); for (int k=1; k<=tempn; k++) if (((tempn % k)==0) && ((tempd % k)==0)) gcd = k; return Fraction(num/gcd, den/gcd); } friend ostream& operator<< (ostream& o, Fraction& f) { o << f.num << "/" << f.den; return o; } }; Fraction operator+ (Fraction& a, Fraction& b) { Fraction sum; sum.num = (a.num*b.den) + (a.den*b.num); sum.den = (a.den*b.den); return sum.reduced(); } Fraction operator- (Fraction& a, Fraction& b) { Fraction sum; sum.num = (a.num*b.den) - (a.den*b.num); sum.den = (a.den*b.den); return sum.reduced(); } Fraction operator* (Fraction& a, Fraction& b) { Fraction sum; sum.num = (a.num*b.num); sum.den = (a.den*b.den); return sum.reduced(); } Fraction operator/ (Fraction& a, Fraction& b) { Fraction sum; sum.num = (a.num*b.den); sum.den = (a.den*b.num); return sum.reduced(); } // fraction.cpp #include "fraction.h" int main(int argc, char *argv[]) { Fraction a(1,2); Fraction b(3,7); Fraction c(1,3); Fraction d(4,5); Fraction b=a+a; cout << "Sum = " << a+b << ", Diff = " << a-b << ", Prod = " << a*b << ", Qot = " << a/b << endl; cout << "Sum = " << c+d << ", Diff = " << c-d << ", Prod = " << c*d << ", Qot = " << c/d << endl; }