比率类中的运算符/=以错误的方式工作
Operator/= in Ratio Class is working in a wrong way
请看这段代码:
#include <iostream>
using namespace std;
class Ratio
{
public:
Ratio(int a=0, int b=1) : num(a), den(b) {}
Ratio& operator/=(const Ratio&);
void print() {cout << num << "/" << den << endl;}
private:
int num, den;
};
Ratio& Ratio::operator/=(const Ratio& r)
{
num*=r.den;
den*=r.num;
return *this;
}
int main()
{
Ratio x(1,2), y(2,5);
y/=x;
y.print();
}
执行此代码后,(y)应该是5/4,我已经用手计算了好几遍!但是在打印后的输出 (y) 中,它显示 4/5!它被它颠倒了不应该!
我的代码问题在哪里? 真的我已经检查了好几次,似乎没有任何问题!这是一个家庭作业:)
你是如何决定它应该是 5/4 的?(2/5)/(1/2) = 4/5,这是正确的结果。也许您正在计算 x/=y 而不是当您期望 5/4 时。
y/=x
与 y = y/x
相同,后者2/5 / 1/2
2/5 x 2/1
= 4/5
相关文章:
- 重载方法的方式会在使用临时调用时生成编译器错误
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 我试图创建临时对象的方式有错误吗
- 我的随机生成器是否不工作,或者我决定人/骨架是否击中对手的方式是否有错误
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 我是否以错误的方式声明了getpriorityvalues函数
- 数组数据以错误的方式遍历 Python/Matlab
- 使用分而治之的最大总和子数组,为什么要以不同的方式使用 for 循环,答案是错误的?
- Unity 的 HLSL/Cg 预处理器工作方式错误?
- 识别指针处理方式中的错误
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- 错误:以增量方式填充向量时,表达式必须具有整数或无作用域枚举类型
- 我是否以错误的方式使用记忆屏障
- 我是用错误的方式编译吗?
- C++字符数组以某种方式初始化为错误的大小
- 这种创建带有指向实例的指针的分离 std::thread 的方式是错误的吗?
- 我可以以某种方式从GCC过滤错误消息行
- GCC 以错误的方式解包(我<...)折叠表达式
- 使用枚举的错误方式
- Xercesc - NAMESPACE_ERR:试图以与名称空间相关的错误方式创建或更改对象