继承具有受保护数据成员的类时,可能需要使用子类的初始化列表来初始化它们类的构造函数。然而,这种方法经常会导致编译错误。
在这个例子中:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
编译此代码将导致错误,因为子类 Child 没有名为 Something 的成员.
要解决这个问题,父类 Parent 必须定义一个构造函数来初始化受保护的成员。这个构造函数可以声明为 protected,允许派生类访问它。
下面修改后的代码将成功编译:
<code class="cpp">class Parent { protected: std::string something; Parent(const std::string& something) : something(something) {} }; class Child : public Parent { private: Child() : Parent("Hello, World!") {} };</code>
在这个修改后的代码中,父类中的 protected 构造函数转发Something 成员的初始化参数,使子类能够在自己的初始化过程中初始化父类的受保护成员。
通过遵循此语法,可以使用子类的初始化列表来初始化受保护的父类成员,提供跨继承层次结构的对象初始化具有更大的控制力和灵活性。
以上是子类可以通过初始化列表初始化受保护的父成员吗?的详细内容。更多信息请关注PHP中文网其他相关文章!