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

How to make this fraction addition operator work?

本文关键字:运算符 工作 何使这      更新时间:2023-10-16
  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;
   }

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

你的函数应该看起来像

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
}

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

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

然后你需要改变这一行:num * (lcm / denom) += obj.num * (lcm / obj.denom);

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

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

你是认真的吗? :-O

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

做对了:-

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

我认为代码应该是这样的

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

}