当前位置: 首页 > news >正文

45、子类需要重写父类的构造函数嘛,子类自己的构造函数呢?

45、子类需要重写父类的构造函数嘛,子类自己的构造函数呢?

一、子类是否需要重写父类的构造函数?

1. 不需要重写的场景

  • 基类有无参构造函数
    若父类(基类)显式或隐式定义了无参构造函数,子类无需重写构造函数即可直接实例化。例如:

    class Base {
    public:Base() {}  // 无参构造函数
    };
    class Derived : public Base {};  // 子类无需定义构造函数
    
  • 使用继承构造函数(C++特性)
    在C++11中,通过using Base::Base语法可直接继承父类的所有构造函数,无需手动重写:

    class Base {
    public:Base(int);Base(int, double);
    };
    class Derived : public Base {
    public:using Base::Base;  // 继承Base(int)和Base(int, double)
    };
    

2. 必须重写的场景

  • 基类没有无参构造函数
    若父类未定义无参构造函数且子类未使用继承构造函数,子类必须显式调用父类的有参构造函数:

    class Base {
    public:Base(int x) {}  // 仅定义有参构造函数
    };
    class Derived : public Base {
    public:Derived(int x) : Base(x) {}  // 必须显式调用父类构造函数
    };
    
  • 需要初始化子类新增成员
    若子类新增了需要初始化的成员变量,即使继承构造函数,仍需手动定义构造函数

二、子类重写父类构造函数后 是否需要单独定义自己的构造函数?

子类是否需要定义自己的构造函数,与其是否“重写”父类构造函数并无直接关联。具体是否需要定义子类构造函数,分以下两种情况:

  1. 子类必须定义构造函数的场景
    • 父类没有 无参构造函数,且子类未通过继承或其他方式复用父类构造函数。
    • 子类需要初始化自身 新增的成员变量或资源
    • 需要定制化构造逻辑(如参数校验、动态资源分配)。
  2. 无需定义构造函数的场景
    • 父类有无参构造函数,且子类无新增初始化需求
    • 子类通过继承语法(如C++的using Base::Base)直接复用父类构造函数。

核心:父类负责自身成员的初始化,子类负责新增成员的初始化。若子类未显式调用父类构造函数,可能导致父类成员未初始化。

相关文章:

  • gem5-gpu教程03 当前的gem5-gpu软件架构(因为涉及太多专业名词所以用英语表达)
  • Python 流程控制
  • VUE3中使用echarts,配置都正确,不出现tooltip
  • 1.1 java开发的准备工作
  • 运维案例:让服务器稳定运行,守护业务不掉线!
  • AI大模型和人脑的区别
  • 流程架构是什么?为什么要构建流程架构,以及如何构建流程结构?
  • Android Gradle Plugin (AGP) 和 Gradle 的關係
  • Java_day25-29
  • 大模型在代码安全检测中的应用
  • python函数与模块
  • HCIP-H12-821 核心知识梳理 (6)
  • 《浔川AI翻译v6.1.0问题已修复公告》
  • redis client.ttl(key)
  • 04-Java入门-Path环境变量的配置
  • lerna 8.x 详细教程
  • 【AI News | 20250423】每日AI进展
  • LLama Factory从入门到放弃
  • 非关系型数据库 八股文 Redis相关 缓存雪崩 击穿 穿透
  • java Nacos
  • 山西省援疆前方指挥部总指挥刘鹓已任忻州市委副书记
  • 体坛联播|AC米兰挺进意大利杯决赛,弗雷戴特宣布退役
  • 主动权益基金一季度重仓股出炉:腾讯跃升至第一,阿里、比亚迪、中芯国际新进前十
  • 杭州萧山区两宗地块收金约44.73亿元,最高溢价率74.4%
  • 广电总局加快布局超高清视听产业链,多项成果亮相
  • 商务部:支持外籍医生开设诊所,优化罕见病药品进口抽检模式