重载+运算符以添加分数

时间:2017-05-11 17:32:43

标签: c++ overloading operator-keyword fractions

我花了最近几个小时试图在线找到问题的解决方案,而且无法解决。为了记录,我是一个初学者,可能犯了很多错误,我想请求一个问题的帮助:我试图编写程序,这将添加两个分数并显示结果。例如,我已进入" 5/11"和" 3/11",我希望它能够发布" 8/11"。但是,它给了我" 0/1"我超载了#34; +"和">>"运营商,但我不确定我是否做得正确。这是代码:

#include <iostream>
using namespace std;
class fraction
{
public:
int num;
int den;
int sign;
fraction (int top);
fraction (int top, int bot);
};

ostream& operator<< (ostream& z , fraction u) {
if (u.sign==-1)   z<<"-";
  z<<u.num<<"/"<<u.den;
  return z;
}
fraction operator+ (fraction x, fraction y) {
x.num*y.den+y.num*x.den;
return 0; }


fraction::fraction (int top, int bot)
{
den=bot;
num=top;
sign=1;


if (bot<0)
{
sign=-sign;
den=-den;
}

if (top<0)
{
sign=-sign;
num=-num;
}

if (bot==0)
{
num=0;
den=1;
sign=1;
}

}

fraction::fraction (int top)
{
    den=1;
    num=top;
    sign=1;
    if (top<0)
    {
        sign=-sign;
        num=-num;
    }
}

int main() {
fraction x (5,11),y (4,11);
cout<<x<<" "<<y;
cout<<"  x+y= "<<x+y;
return 0;
}

具体来说,我认为问题在于两个方面:

fraction operator+ (fraction x, fraction y) {
x.num*y.den+y.num*x.den;
return 0; }

int main() {
fraction x (5,11),y (4,11);
cout<<x<<" "<<y;
cout<<"  x+y= "<<x+y;
return 0;
}

我知道&#34;返回0&#34;在重载是错误的,但我不知道用什么来替换它。任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:1)

fraction operator+ (fraction x, fraction y) {
return fraction(x.num*y.den+y.num*x.den,x.den*y.den); }

答案 1 :(得分:0)

这没有做任何事情:

x.num*y.den+y.num*x.den;

这只是将一些数字相乘,但结果没有任何作用。

您需要创建一个fraction对象,更新其成员,然后返回:

fraction result;
result.num = ...;
result.den = ...;
return result;