如何使这个分数加法运算符工作
How to make this fraction addition operator work?
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);
顺便说一下,您还需要更新您的denom
。 denom = 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
}
相关文章:
- 布尔比较运算符是如何在C++中工作的
- 在 c++ 中对字符串进行操作的关系运算符无法按预期工作
- C++编程:运算符重载中的引用如何工作?
- 编译"运算符删除"时C++编译器如何工作?
- C++,()运算符重载,它的工作是什么
- 错误:三元运算符无法在对象中正常工作"cout"
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 为什么在C++中使用关系运算符创建的模板函数不能对字符串正常工作?
- C++自定义删除运算符不能正常工作?
- 为什么我的模运算符无法正常工作?
- ostream_iterator运算符=在pair<int,int>上失败,但在包装器类上工作。我不能为成对<>重载运算符<<吗?
- 变量地址的运算符[]是如何工作的
- 为什么我的类工作正常,即使在返回垃圾值作为赋值运算符和空复制构造函数的返回之后
- 如何使用while循环找到GCD?模数运算符是如何工作的
- 让类与运算符一起工作更简单的方法
- 枚举运算符不工作
- 为什么运算符"new"需要指针才能工作?
- 有人可以解释速记赋值运算符的实际工作原理吗?
- c++运算符=工作异常(函数内部输出正常,但返回后错误)
- 如何使这个分数加法运算符工作