重载 + 运算符以添加分数
Overloading + operator to add fractions
过去几个小时我一直在网上寻找问题的解决方案,但没有成功。作为记录,我是一个初学者,可能会犯很多错误,我想在一个问题上寻求帮助:我正在尝试编写程序,它将添加两个分数并显示结果。例如,我输入了“5/11”和“3/11”,我想让它显示“8/11”。但是,它给了我“0/1”我已经重载了“+”和“>>”运算符,但我不确定我是否做对了。这是代码:
#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;
}
我知道重载中的"return 0"是错误的,但我不知道用什么来代替它。任何帮助将不胜感激!
这没有做任何事情:
x.num*y.den+y.num*x.den;
这只是将一些数字相乘,而不对结果做任何处理。
您需要创建一个 fraction
对象,更新其成员,然后 return 即:
fraction result;
result.num = ...;
result.den = ...;
return result;
fraction operator+ (fraction x, fraction y) {
return fraction(x.num*y.den+y.num*x.den,x.den*y.den); }
过去几个小时我一直在网上寻找问题的解决方案,但没有成功。作为记录,我是一个初学者,可能会犯很多错误,我想在一个问题上寻求帮助:我正在尝试编写程序,它将添加两个分数并显示结果。例如,我输入了“5/11”和“3/11”,我想让它显示“8/11”。但是,它给了我“0/1”我已经重载了“+”和“>>”运算符,但我不确定我是否做对了。这是代码:
#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;
}
我知道重载中的"return 0"是错误的,但我不知道用什么来代替它。任何帮助将不胜感激!
这没有做任何事情:
x.num*y.den+y.num*x.den;
这只是将一些数字相乘,而不对结果做任何处理。
您需要创建一个 fraction
对象,更新其成员,然后 return 即:
fraction result;
result.num = ...;
result.den = ...;
return result;
fraction operator+ (fraction x, fraction y) {
return fraction(x.num*y.den+y.num*x.den,x.den*y.den); }