在其构造函数中没有参数的对象类成员的初始化顺序是什么?

时间:2018-08-19 18:27:38

标签: c++ class object

我有三堂课。第一个是“游戏”,它取决于其他两个。我的第二个类是“窗口”,这是对第三类“ VKBase”的依赖。后两个类的构造函数中没有参数。游戏包含其他对象作为对象成员,并且Window必须在VKBase之前进行初始化。

class Game
{
    Boolean bit = true;

    Window window;

    VKBase VkBase;

public:

    Game();
   ~Game();

    void _Set();

    void Loop();

    void Exit();
};

由于这两个类的构造函数中没有参数,因此无法在Game的构造函数中对其进行初始化。因此,每当我从Game类创建对象时,它们都会被初始化。

但是问题是,由于初始化顺序很重要,因此哪个首先初始化?窗口还是VkBase?

2 个答案:

答案 0 :(得分:1)

初始化顺序总是从左到右:首先是基类,从左到右,然后是成员变量(按声明顺序)。因此,您班级中第一个要初始化的是bit,然后是window

答案 1 :(得分:0)

  

对象类成员[...]的初始化顺序是什么?

以声明它们的顺序。在您的示例中,bit首先被初始化,window其次,VkBase被初始化。这些数据成员具有默认构造函数还是取决于参数的构造函数在这里都没有关系。

  

由于这两个类的构造函数中没有参数,因此无法在Game的构造函数中对其进行初始化

这种错误,实际上是通过调用默认构造函数来初始化实例的。请注意,对于任何具有默认构造函数的类,

ClassWithDefaultCtor instance;
实例化此变量时,

会调用此默认构造函数(如果上面的声明是类数据成员,则可能在构造封闭类时)。此语法称为default initialization,这正是您的类中发生的情况。请注意,您可以将以上内容更改为

ClassWithDefaultCtor instance{};

这可能更清楚地说明该对象已正确初始化。