C++,问题求大神改代码啊!?分数一定奉上!到底错在哪里了?.....
#include<iostream>usingnamespacestd;/*重载分数加法乘法,输入输出以及化简下面的代码错怎么就错了?*/classRational{in...
#include<iostream>
using namespace std;
/*重载分数加法乘法,输入 输出以及化简下面的代码错怎么就错了? */
class Rational
{
int fz;
int fm;
public:
Rational(int d=0,int n=1):fz(d),fm(n){}
int GetGcd()
{
int imax,imin;
int temp=0;
if(fz>fm)
{
imax=fz;
imin=fm;
}
else
{
imax=fm;
imin=fz;
}
do
{
temp=imax%imin;
imax=imin;
imin=temp;
}while(temp!=0);
return imax;
}
friend ostream& operator<<(ostream&output,const Rational&obj);
friend istream&operator>>(istream&input,const Rational&obj);
Rational& operator*(const Rational&obj);
Rational&operator+(const Rational&obj);
Rational&operator=(const Rational&obj);
void Simplify()
{
int gcd=GetGcd();
fz=fz/gcd;
fm=fm/gcd;
}
};
ostream& operator<<(ostream&output,const Rational&obj)
{
output<<obj.fz<<"/"<<obj.fm;
return output;
}
istream &operator>>(istream&input,const Rational&obj)
{
char ch;
input>>obj.fz>>ch>>obj.fm;
return input;
}
Rational& Rational::operator +(const Rational&obj)
{
fz=fz*obj.fm+obj.fz*fm;
fm=fm*obj.fm;
this->Simplify();
return *this;
}
Rational& Rational::operator=(const Rational&obj)
{
fz=obj.fz;
fm=obj.fm;
return*this;
}
Rational& Rational::operator*(const Rational&obj)
{
fz=obj.fz*fz;
fm=obj.fm*fm;
this->Simplify();
return*this;
}
int main()
{
Rational A,B,C,D;
cin>>A;
cin>>B;
cout<<endl;
C=A+B;
D=A*B;
cout<<C<<endl;
cout<<D<<endl;
return 0;
} 展开
using namespace std;
/*重载分数加法乘法,输入 输出以及化简下面的代码错怎么就错了? */
class Rational
{
int fz;
int fm;
public:
Rational(int d=0,int n=1):fz(d),fm(n){}
int GetGcd()
{
int imax,imin;
int temp=0;
if(fz>fm)
{
imax=fz;
imin=fm;
}
else
{
imax=fm;
imin=fz;
}
do
{
temp=imax%imin;
imax=imin;
imin=temp;
}while(temp!=0);
return imax;
}
friend ostream& operator<<(ostream&output,const Rational&obj);
friend istream&operator>>(istream&input,const Rational&obj);
Rational& operator*(const Rational&obj);
Rational&operator+(const Rational&obj);
Rational&operator=(const Rational&obj);
void Simplify()
{
int gcd=GetGcd();
fz=fz/gcd;
fm=fm/gcd;
}
};
ostream& operator<<(ostream&output,const Rational&obj)
{
output<<obj.fz<<"/"<<obj.fm;
return output;
}
istream &operator>>(istream&input,const Rational&obj)
{
char ch;
input>>obj.fz>>ch>>obj.fm;
return input;
}
Rational& Rational::operator +(const Rational&obj)
{
fz=fz*obj.fm+obj.fz*fm;
fm=fm*obj.fm;
this->Simplify();
return *this;
}
Rational& Rational::operator=(const Rational&obj)
{
fz=obj.fz;
fm=obj.fm;
return*this;
}
Rational& Rational::operator*(const Rational&obj)
{
fz=obj.fz*fz;
fm=obj.fm*fm;
this->Simplify();
return*this;
}
int main()
{
Rational A,B,C,D;
cin>>A;
cin>>B;
cout<<endl;
C=A+B;
D=A*B;
cout<<C<<endl;
cout<<D<<endl;
return 0;
} 展开
3个回答
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
GetGcd() 函数返回语句应该改为 return imin; 吧。
重载 + 和 * 的函数返回类型应该为Rational(不应是Rational& ) 。
重载 + 和 * 的函数中不应改变*this对象的状态,而应创建一个对象(比如temp)来保存+和*的结果,最后返回该对象,而不是返回*this。
重载 >> 和 << 的函数可能还需要提前声明原型(视所用的编译器而定)。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先提个醒:类中开头的int fz;和int fm;默认的是private性质,所以后面友元重载函数中类似output<<obj.fz<<"/"<<obj.fm;的语句中obj.fz是非法的,因为private性质的数据成员不能通过对象访问,要由类的成员函数才能访问。另:istream &operator>>(istream&input,const Rational&obj)这个重载是向obj输入的,把obj声明为const就无法对其改写了还怎么输入。根据以上提示你自己先改吧,有问题续问……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询