You need to enable JavaScript to run this app. C++重载+运算符时修改Baza类构造函数后求和结果异常
优惠活动
大模型
产品
解决方案
定价
更多

C++重载+运算符时修改Baza类构造函数后求和结果异常

求和结果异常的核心原因

构造函数的额外加工逻辑未与求和的对象创建逻辑隔离,导致计算链路出现双重处理

  • 原构造函数为纯透传逻辑:执行a=x; b=y;,传入什么参数就存储什么值,无额外加工,此时求和时传入计算好的和值,结果符合预期
  • 修改后的构造函数给a的赋值增加了固定偏移:执行this->a = x + 5; this->b = y;,所有通过Baza构造函数创建的实例,a值都会比传入参数多5

可以通过实际执行的数值对照直观看到偏差来源:

修改构造函数后的实际执行流程:

  1. 创建obd1时传入参数(2,3):构造函数执行后,实际存储a=2+5=7,b=3
  2. 创建obd2时传入参数(4,5):构造函数执行后,实际存储a=4+5=9,b=5
  3. 求和时Suma函数计算得到a的和值为7+9=16,b的和值为3+5=8,随后调用Baza(16,8)创建结果对象
  4. 这次构造调用又触发了+5的偏移逻辑:最终a值为16+5=21,b值为8,和预期的原始值求和结果(2+4, 3+5)=(6,8)差异极大
常见修正方向
  • 如果需求是「所有外部创建的Baza实例a比传入值多5,但求和对实际存储的a值计算、不再额外加工」:给Baza类增加一个不带偏移的内部构造重载,专门供Suma方法创建求和结果使用,避免触发公共创建逻辑的+5处理
  • 如果需求是「对用户最初传入的原始参数做求和」:给类增加单独的成员变量存储原始的x、y值,不要只存储加工后的a、b属性,否则求和时拿到的已经是加过偏移的值,计算结果必然出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 08:24:09