此时是构造函数中调用的基类的构造函数

At which point are the constructors of base classes called in a constructor

本文关键字:构造函数 基类 调用      更新时间:2023-10-16

我需要知道在派生类构造函数的调用中何时调用基类的构造函数。

Small example:
class Base1
{...}
class Base2
{...}
class Derived : Base1,Base2
{...}
int main (int argc, char** argv)
{
Derived Child;
}

使用命令Derived Child;调用Derived的构造函数,但我已经读到,在执行Derived类构造函数之前,会执行所有的基构造函数,即Base1和Base2的构造函数。

所以我想知道如果类Derived的构造函数看起来像这个,那么事件顺序会是什么样子

Derived::Derived (Parameters)
:                      //initialization list
Base2 (Parameters)
{...}

Base2的构造函数现在在构造函数Derived的初始化列表中被调用,还是以前被调用。此外,在构造函数Derived的调用开始时或在类Derived构造函数的初始化列表开始时调用的所有基类构造函数。

问候streight

构造函数的调用顺序是1st基类,然后是派生类。

在当前示例中构造函数的调用顺序为:基础1基础2衍生

如果我们将类定义更改为

派生类:Basis2、Basis1

则构造函数调用的顺序为:基础2基础1衍生

基类构造函数总是在派生类之前调用,无论是否从初始化列表中显式调用。