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

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -