#include #include "Number.h" #include "Fraction.h" #include "Integer.h" Number::Number(int n) : rep(new Integer(n)) {} static int gcd(int a, int b){ if(b == 0) return a; else return gcd(b, a % b); } Number::Number(int num, int den){ assert(den != 0); if(den < 0){ num = -num; den = -den; } int c = gcd(num, den); num /= c; den /= c; if(den == 1) rep = new Integer(num); else rep = new Fraction(num, den); } Number::Number(const Number &n) : rep(n.rep->copy()) {} Number & Number::operator=(const Number &n){ if(&n == this) return *this; else{ delete rep; rep = n.rep->copy(); return *this; } } void Number::display() const { rep->display(); } Number Number::operator+(const Number & n) const { return rep->add(n.rep); } Number Number::operator/(const Number & n) const { return rep->div(n.rep); } Number::~Number(){ delete rep; }