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;
}
我正在尝试使用此代码添加分数。然而,当分母不同时,重载加法运算符不起作用。但是当分母相同时,代码确实有用。
答案 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);
顺便提一下,您还需要更新denom
。 denom = 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
}