Listing 4

istream &operator> >(istream &is, rational &r)
     {
     char lp, slash, rp;
     long n, d;
     is >> lp >> n >> slash >> d >> rp;
     if (is && lp = = '(' && slash == '/' && rp == ')')
           r = rational(n, d);
     else if(is.good())
           //indicate a failure
     return is;
     }