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

