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

C++类成员函数中使用同类用户生成对象的实现咨询

C++类成员函数中使用同类用户生成对象的实现咨询

首先看你当前的代码,问题很明确:你在Subtraction函数里创建的MixedFrac1和MixedFrac2是全新的、通过默认构造函数生成的对象,它们的数值都是默认初始化的(可能是0或者随机值),自然拿不到用户之前创建好的那些对象的数据,这肯定不是你想要的效果。

我给你两种常用的正确实现思路,你可以根据自己的项目需求选择:

思路一:让函数接收两个用户生成的对象作为参数

把Subtraction改成接收两个MixedFractions类型的引用参数,这样就能直接使用用户已经设置好数值的对象来计算。另外建议让函数返回计算后的结果对象,这样更符合逻辑:

// 修改成员函数的签名和实现
MixedFractions MixedFractions::Subtraction(const MixedFractions& frac1, const MixedFractions& frac2) {
    MixedFractions result;
    // 获取传入对象的整数部分做减法
    int wholeNumDiff = frac1.GetWholeNum() - frac2.GetWholeNum();
    result.SetWholeNum(wholeNumDiff);
    
    // 这里一定要补充分数部分的减法逻辑!
    // 比如要处理分母通分、分子相减,还有如果分数部分不够减的话要从整数部分借位
    // 比如:frac1的分数部分 < frac2的分数部分时,wholeNumDiff要减1,分数部分加上分母再减
    
    return result;
}

调用的时候,你就可以把用户生成好的对象传进去:

int main() {
    MixedFractions userFrac1, userFrac2;
    // 假设这里有代码让用户给这两个对象设置数值,比如调用SetWholeNum、SetNumerator等函数
    MixedFractions difference = MixedFractions::Subtraction(userFrac1, userFrac2);
    // 如果把Subtraction设为静态成员函数,调用起来更直观,记得在类声明里加static
}

思路二:让函数对当前对象和另一个对象做减法

如果你的需求是“用调用这个函数的对象减去另一个对象”,可以把函数改成这样,让它基于当前对象(this指针指向的对象)来计算:

// 加const表示这个函数不会修改当前对象的状态
MixedFractions MixedFractions::Subtraction(const MixedFractions& other) const {
    MixedFractions result;
    // 当前对象的整数部分减去传入对象的整数部分
    int wholeNumDiff = this->GetWholeNum() - other.GetWholeNum();
    result.SetWholeNum(wholeNumDiff);
    
    // 同样要补充分数部分的减法和借位逻辑
    
    return result;
}

调用的时候就更简洁:

MixedFractions difference = userFrac1.Subtraction(userFrac2);
// 这就表示用userFrac1减去userFrac2

另外要提醒你,你当前的代码只处理了混合分数的整数部分,完全没涉及分数部分的运算,这是不完整的。混合分数减法的核心难点就在分数部分的借位处理,一定要把这部分逻辑补上,不然这个函数只能算个整数减法,达不到混合分数运算的目的。

备注:内容来源于stack exchange,提问作者Albert Pena Charrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:29:40