You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何使用初始化列表在Square构造函数中调用Rectangle构造函数

实现方法

直接在Square类构造函数的初始化列表中显式调用Rectangle的带参构造即可,不需要在Square构造函数体内重复给sideA、sideB赋值,基类的构造函数已经自带了边长小于1时自动置为1的校验逻辑,可以直接复用。

核心修改点

  • Square构造函数的初始化列表写法:由于Rectangle没有提供无参默认构造,你必须在派生类构造的初始化列表中显式调用它的双参构造,把传入的正方形边长同时传给两个参数,就能完成sideA、sideB的初始化:
Square::Square(int a) : Rectangle(a, a) {
    // 函数体不需要额外写赋值逻辑,基类构造已经完成成员初始化和合法性校验
}
  • 修复现有代码的逻辑bug:你当前写的setSideA、setSideB方法存在作用域错误,if语句没有加花括号时,C++只会把紧跟if的第一行代码作为判断分支,后续的sideB = 1;会不受判断条件控制、无论传入值是否合法都会执行。修正后的set方法要始终保证正方形两边长度一致,补全校验逻辑:
void Square::setSideA(int a) {
    int validSide = a < 1 ? 1 : a;
    sideA = validSide;
    sideB = validSide;
}

void Square::setSideB(int b) {
    int validSide = b < 1 ? 1 : b;
    sideA = validSide;
    sideB = validSide;
}

注意:使用初始化列表调用基类构造是派生类初始化的标准写法,相比在构造函数体内给继承来的成员赋值,这种方式不会先触发基类的默认构造再覆写成员值,执行效率更高,也是C++语法对派生类构造的明确要求——如果基类没有无参构造,不在初始化列表显式调用基类构造的代码会直接编译失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:22:18