c++ 子类 无法初始化基类的成员变量?

c++ Child class Unable to initialize Base class's member variable?

本文关键字:成员 变量 基类 初始化 子类 c++      更新时间:2023-10-16

所以这个问题增加了我之前关于在初始化列表中初始化成员向量的问题。

这是我的基础&派生类定义…

class Base {
public:
    std::vector<int> m_Vector;
}

class Derived : public Base {
    Derived() : m_Vector {1, 2, 3} {}      // ERROR when referring to m_Vector
}

当尝试初始化派生的m_Vector..我在Visual Studio中得到一个错误,说

"m_Vector" is not a nonstatic data member or base class of class "Derived"

为什么派生类不能引用m_Vector在这种情况下…?

可以在初始化后在派生类构造函数中修改数据成员,但需要在基类中执行初始化。例如,

class Base 
{
public:
    std::vector<int> m_Vector;
    Base() : m_Vector {1, 2, 3} {} 
};
class Derived : public Base 
{
};

这是因为基类(通过扩展,它的所有数据成员)在派生类及其任何成员之前初始化。

如果您需要能够控制DerivedBase数据成员的初始化值,您可以为Base添加合适的构造函数,并在Derived中使用:

class Base 
{
public:
    std::vector<int> m_Vector;
    Base(const std::vector<int>& v) : m_Vector(v) {}
    Base(std::vector<int>&& v) : m_Vector(std::move(v)) {}
};
class Derived : public Base 
{
public:
  Derived() : Base({1, 2, 3}) {}
};