You need to enable JavaScript to run this app. C++ 派生类调用基类Getter返回已初始化属性的大负数问题
优惠活动
大模型
产品
解决方案
定价
更多

C++ 派生类调用基类Getter返回已初始化属性的大负数问题

问题定位

派生类实例读取到异常的大负数属性值,是两处代码疏漏叠加导致的:

  • 你在Character类里只声明了无参构造Character();,实际实现里没有对类成员做任何初始化。这个空构造执行完,类里的hp/damage/speed这些int类型成员都是栈内存残留的随机值,没有被赋值。
  • Warrior的构造函数初始化列表中完全没有指定要调用的基类构造方法,按照C++语法规则,派生类构造执行时会自动调用基类的无参默认构造。这就直接走到了上面那个空构造的逻辑,基类成员全部是未初始化的垃圾值。
    而你直接实例化Character时走的是带参构造的逻辑,初始化列表明确给所有成员赋了默认值,所以运行结果正常。
修复方式

任选一种方案即可解决问题:

  • 补全基类无参构造的初始化逻辑,和带参构造的默认值保持一致,推荐用委托构造减少重复代码,避免后续两处默认值修改不一致:
    // 无参构造直接委托给已有的带参构造,不用重复写初始化逻辑
    Character() : Character("Unnamed") {}
    
  • 删掉无用的Character();无参构造声明,在Warrior的构造函数初始化列表最开头显式指定要调用的基类带参构造:
    explicit Warrior()
        : Character("Unnamed"), attack{ "Berserker Strike" }, weapon {"War Hammer"}
    {}
    
额外代码疏漏

你贴出的Character类定义不完整:private成员列表结束后没有补上类的闭合大括号,就直接编写了main函数,这部分是粘贴时的遗漏,需要补上才能正常编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 17:45:03