c++ - >> Operator overloading function infinite recurse -
i wrote rational class college homework.
class rational { friend std::istream &operator >>(std::istream &, const rational &); friend std::ostream &operator <<(std::ostream &, const rational &); public: ... private: int numerator; int denominator; } istream &operator >>(istream &istm, const rational &num){ istm>>num.numerator>>num.denominator; return istm; }
however >> overloading function seems loop infinitely. core dump...
i found i've added "const" ratoinal &num accident.
my question why
istm>>num.numerator>>num.denominator;
compile become infinite loop?
and please explain following result... thanks
const int i; cin>>i; //compile error int c; const int &a=c; cin>>a; //pass
you haven't shown of class guess following happening
class rational { friend std::istream& operator>>(std::istream&, const rational&); friend std::ostream& operator<<(std::ostream&, const rational&); public: rational(int num); ... private: int numerator; int denominator; }; istream& operator>>(istream& istm, const rational& num) { istm >> rational(num.numerator) >> rational(num.denominator); return istm; }
assuming rational class has one-arg constructor taking int, version of operator>>, wrongly takes const argument, implicitly create rational objects numerator , denominator. results in infinite loop. i've added rational constructor calls operator>> above make clear what's happening.
this example shows dangers in having automatic conversion between types when have one-arg constructor. can disable using keyword explicit.
explicit rational(int num);
but guess in case might want automatic conversion int rational of time.
Comments
Post a Comment