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

C++抽象基类在派生类构造函数初始化列表中初始化的含义求解

这行代码的本质含义

你看到的nameA::class_a()调用,是派生类class_b的构造函数在初始化列表中显式调用抽象基类的无参构造函数,用来初始化当前class_b实例中包含的class_a基类子对象,完全符合C++语法规则。


规则说明

  • 抽象类不能实例化的规则,指的是不能创建独立的、完整的抽象类对象,不管是栈声明class_a a;还是堆分配new class_a()都是禁止的。
  • 但派生类继承抽象类时,每个派生类对象内部都会包含一个抽象基类的子对象,这个子对象是派生类对象的一部分,不是独立的抽象类实例,必须通过基类构造函数完成初始化,这个行为是被C++标准允许的。

额外补充

  • 你给出的class_a只声明了虚析构函数和纯虚函数,无自定义的成员变量和带参构造函数,编译器会自动生成默认无参构造函数。就算你不在class_b的初始化列表中显式写nameA::class_a(),编译器也会自动隐式调用基类的无参构造函数,写出来只是显式标明了初始化逻辑,和隐式调用的效果完全一致。
  • 注意当前你给出的代码中,class_b还没有实现基类的纯虚函数process(),因此现在的class_b依然是抽象类,同样无法创建实例,必须实现process()之后才能正常实例化class_b。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:02