重载operator+实现vector中Force类对象的求和问题
解决Force类对象批量求和的问题
首先得提一句你现有operator+重载里的小问题:你在函数里直接修改了this->forceType,这会导致调用加法的原对象被改动(比如执行a + b时,a的类型会被改成'c'),这不符合加法操作“不修改原操作数”的常规预期哦。正确的做法应该是给返回的结果对象设置forceType,而且成员函数要加上const,明确表示不会修改当前实例:
Force Force::operator+(const Force& f) const { Force result; result.forceType = 'c'; // 仅给求和结果设置类型 result.xArg = this->xArg + f.xArg; result.yArg = this->yArg + f.yArg; return result; }
接下来就是遍历vector里的Force对象完成累加的具体步骤啦:
方法一:用现有operator+实现累加
假设你已经把文件里的所有Force对象读取并存储到了vector<Force> forces中,我们可以初始化一个累加器对象,然后逐个遍历相加:
// 初始化累加器,务必确保默认构造函数把xArg、yArg初始化为0 Force totalForce; // 遍历vector里的每个Force对象 for (const auto& singleForce : forces) { totalForce = totalForce + singleForce; }
方法二:重载operator+=(更高效)
如果觉得每次加法都创建临时对象有点浪费性能,推荐你再重载一个operator+=,直接在累加器对象上修改,代码更简洁也更高效:
Force& Force::operator+=(const Force& f) { this->xArg += f.xArg; this->yArg += f.yArg; this->forceType = 'c'; // 按需设置累加后的类型 return *this; }
然后遍历的时候就可以这么写:
Force totalForce; for (const auto& singleForce : forces) { totalForce += singleForce; }
最后显示总和
累加完成后,直接输出totalForce的x和y分量即可:
std::cout << "总x分量:" << totalForce.xArg << std::endl; std::cout << "总y分量:" << totalForce.yArg << std::endl;
另外要注意:一定要确保Force类的默认构造函数把xArg和yArg初始化为0,不然累加的初始值会是随机的,结果就完全错啦~比如可以这样写默认构造:
Force() : xArg(0), yArg(0), forceType(' ') {}
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

