如何使这个分数加法运算符工作?

时间:2014-12-01 16:44:14

标签: c++ operator-overloading fractions

  Fraction &operator+= (const Fraction &obj){
    if (denom == obj.denom){
      num += obj.num;
    }
    else{   
      lcm = l_c_m(num, denom);
      num * (lcm / denom) += obj.num * (lcm / obj.denom);
    }
    return *this;  //returns current object
  }

//calculating highest common denominator
int g_c_d(int n, int d){
    return d == 0? n : g_c_d(d, n % d);
 }

int l_c_m(int a, int b){
  int temp = g_c_d(a, b);
  return temp ? (a / (temp * b)) : 0;
    }

int main(){
   cout << frac1 << " +  " << frac2 << " = ";
   cout << (frac1 += frac2) << endl;
   }

我正在尝试使用此代码添加分数。然而,当分母不同时,重载加法运算符不起作用。但是当分母相同时,代码确实有用。

5 个答案:

答案 0 :(得分:3)

您的功能应该类似于

Fraction &operator+= (const Fraction &obj){
    if (denom == obj.denom){
        num += obj.num;
    } else {
        num = num * obj.denom + obj.num * denom;
        denom *= obj.denom;
    }
    normalize(); // simplify num and obj
    return *this;  //returns current object
}

答案 1 :(得分:1)

如果您打算这样做:lcm = lcm(obj.denom, denom);

然后您需要更改此行:num * (lcm / denom) += obj.num * (lcm / obj.denom);

对此:num = num * (lcm / denom) + obj.num * (lcm / obj.denom);

顺便提一下,您还需要更新denomdenom = lcm;

答案 2 :(得分:1)

lcm = l_c_m(obj.denom,denom); num = num *(lcm / denom)+ obj.num *(lcm / obj.denom);

答案 3 :(得分:0)

你真的是这个意思吗? :-O

num * (lcm / denom) += obj.num * (lcm / obj.denom);

做得对: -

num = num * (lcm / denom) + obj.num * (lcm / obj.denom);

答案 4 :(得分:0)

我认为代码应该是这样的

Fraction &operator+= (const Fraction &obj){
if (denom == obj.denom){
  num += obj.num;
}
else{   
  lcm = l_c_m(obj.denom, denom);
 num= num * (lcm / denom) + obj.num * (lcm / obj.denom);
}
return *this;  //returns current object

}