Rational operator+(const Rational& r1, const Rational& r2) { return Rational(r1.get_num()*r2.get_den()+r1.get_den()*r2.get_num(), r2.get_den()*r1.get_den()); }
Rational operator-(const Rational& r) { return Rational(-r.get_num(), r.get_den()); }
Rational operator/(const Rational& r1, const Rational& r2) { if (r2.get_num() == Integer(0) ) throw std::runtime_error("Division of rational by zero!"); return Rational(r1.get_num()*r2.get_den(), r2.get_num()*r1.get_den()); }
void bvisit(const Rational &x) { *numer_ = x.get_num(); *denom_ = x.get_den(); }