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
相关产品推荐
相关产品推荐

