warning C4717: “operator>>”: 如递归所有控件路径,函数将导致运行时堆栈溢出
#include<iostream>
using namespace std;
class rational
{
public:
rational(int molecule=0,int denominator=0)
{this->molecule=molecule;
this->denominator=denominator;
int k;
k=yue(this->molecule,this->denominator);
cout<<k;
if(k!=0)
{cout<<"正在化简中..."<<endl;
this->molecule/=k;
this->denominator/=k;
cout<<"化简成功"<<endl;}}
void display()
{
cout<<"("<<molecule<<"/"<<denominator<<")"<<endl;}
rational operator+(const rational &r1) const;
rational operator-(const rational &r1) const;
rational operator*(const rational &r1) const;
rational operator/(const rational &r1) const;
friend istream & operator>>(istream &in,const rational &r1);
friend ostream & operator <<(ostream &out,const rational &r1);
private:
int molecule,denominator;
int yue(int n,int m){
int k=0;
for(int i=2;i<=m && i<=n;i++)
if(n%i==0 && m%i==0)
k=i;
return k;}
};
rational rational::operator+(const rational &r1) const
{
return rational(molecule*r1.denominator+r1.molecule*denominator,denominator*r1.denominator);
}
rational rational::operator-(const rational &r1) const
{
return rational(molecule*r1.denominator-r1.molecule*denominator,denominator*r1.denominator);
}
rational rational::operator*(const rational &r1) const
{
return rational(molecule*r1.molecule,denominator*r1.denominator);
}
rational rational::operator/(const rational &r1) const
{
return rational(molecule*r1.denominator,denominator*r1.molecule);
}
ostream & operator <<(ostream &out,const rational &r1)
{ out<<"("<<r1.molecule <<"/"<<r1.denominator<<")" <<endl;
return out;
}
istream &operator >>(istream &in,const rational &r1) //这里是死循环?第一次重载这个。谢谢大家
{ in>>r1.molecule;
in>>r1.denominator;
return in;
} //程序会循环构造函数直至程序崩溃
int main()
{
rational r3;
r3.display();
cin>>r3;
cout<<r3;
}
[解决办法]
istream &operator >>(istream &in,rational &r1)//const是不能有的