Listing 5

istream &operator> >(istream &is, rational &r)
     {
     long n, d;
     char c= 0;
     if (is >> c && c == '(')
        {
        is >> n >> c;
        if (c == '/')
           is >> d >> c;
        if (c != '(')
           {
          is.putback(c);
         is.clear(ios::failbit);
          }
        }
     else
        {
        is.putback(c);
        is >> n;
        d = 1;
        }
     if (is)
        r = rational(n, d);
     return is;
     }
//End of File