派生类中的初始化顺序

Order of initialization in derived classes

本文关键字:初始化 顺序 派生      更新时间:2023-10-16

我试图通过基类的构造函数初始化基类的一些成员,但失败了。在下面的代码中,派生类成员message似乎在调用基构造函数之前没有初始化。解决方法是使用Child(string messg_arg) : message(messg_arg), Parent(messg_arg),但有什么方法可以避免这种情况吗?

class Parent
{
protected:
    string something;
    Parent(string something_arg) : something(something_arg)
    {}   
}
class Child : public Parent
{
public:
    string message;
    Child(string messg_arg) : message(messg_arg), Parent(message)
    {}
}

基类构造函数在派生类中的任何成员构造函数之前调用。这应该很好:

Child(string messg_arg) : Parent(messg_arg), message(messg_arg)
{}