You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中Rational类分数加法错误排查求助

排查Rational类加法功能的错误

嘿,我一眼就瞅出问题在哪了——你的addition函数不小心修改了调用它的对象本身的成员变量!

咱们来拆解一下:在你写的addition方法里,你直接对当前对象的numerator和denominator做了赋值操作:

numerator = numerator * a.denominator + a.numerator * denominator;
denominator = denominator * a.denominator;

这就导致当你调用n2.addition(n3)的时候,n2本身的数值被直接改成了加法后的结果!所以后面你打印n2的时候,它已经不是原来的1/2了,变成了4/4,这才出现了输出里那种奇怪的4/4 + 1/2 = 4/4。

修复方法

加法操作应该是无副作用的——也就是只返回计算结果,不修改参与运算的任何对象本身。我们需要用临时变量来存储计算出来的新分子和分母,而不是直接覆盖当前对象的成员:

Rational Rational::addition(const Rational &a) {
    // 用临时变量存新的分子分母,完全不碰当前对象的成员
    int new_num = numerator * a.denominator + a.numerator * denominator;
    int new_den = denominator * a.denominator;
    return Rational(new_num, new_den);
}

修改之后,n2.addition(n3)只会算出n2 + n3的结果,n2本身还是原来的1/2。再运行你的main函数,输出就会变成正确的:

Testing addition: 1/2 + 1/2 = 4/4

额外优化建议(可选)

你还可以给Rational类加一个约分的逻辑,比如把4/4简化成1/1。可以写一个私有的辅助函数reduce(),在构造函数和运算函数最后调用它,用最大公约数(GCD)来约分分子分母,这样输出会更规范。

内容的提问来源于stack exchange,提问作者muzzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:50:34