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;
}
展开
 我来答
kaixingui2012
2015-04-23 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6221万
展开全部
friend istream&operator>>(istream&input, Rational&obj); //去掉const!!
追问
大神毕竟是大神回答问题真是有水平!太感谢了!哈哈哈!能不能加个、QQ号,求私信大神的QQ....
来自:求助得到的回答
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
笃侠6A
2015-04-23 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3224万
展开全部
  1. GetGcd() 函数返回语句应该改为 return imin; 吧。

  2. 重载 + 和 * 的函数返回类型应该为Rational(不应是Rational& ) 。

  3. 重载 + 和 * 的函数中不应改变*this对象的状态,而应创建一个对象(比如temp)来保存+和*的结果,最后返回该对象,而不是返回*this。

  4. 重载 >> 和 << 的函数可能还需要提前声明原型(视所用的编译器而定)。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2015-04-23 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6389万
展开全部
先提个醒:类中开头的int fz;和int fm;默认的是private性质,所以后面友元重载函数中类似output<<obj.fz<<"/"<<obj.fm;的语句中obj.fz是非法的,因为private性质的数据成员不能通过对象访问,要由类的成员函数才能访问。另:istream &operator>>(istream&input,const Rational&obj)这个重载是向obj输入的,把obj声明为const就无法对其改写了还怎么输入。根据以上提示你自己先改吧,有问题续问……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式