使用初始化列表初始化受保护成员
在面向对象编程中,父类可以拥有可由子类访问的受保护成员。当初始化子对象时,可能还需要初始化在父类中声明的受保护成员。然而,这并不像看起来那么简单。
考虑以下示例:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
在这个示例中,我们尝试使用初始化来初始化父类的受保护成员 some子类的构造函数列表。但是,编译器会报错:类“Child”没有任何名为“something”的字段。发生此错误的原因是受保护的成员某些内容未在子类中声明,因此在初始化列表中不可见。
解决方案
初始化 a 的受保护成员父类在子类的构造函数中,我们需要向父类添加一个构造函数(最好是受保护的),该构造函数采用必要的参数来初始化这些成员。然后,子类可以使用此构造函数来传递适当的值。
这是修改后的实现:
<code class="cpp">class Parent { protected: Parent(const std::string& something) : something(something) {} std::string something; }; class Child : public Parent { private: Child() : Parent("Hello, World!") {} };</code>
在此示例中,我们向父类添加了一个受保护的构造函数,该构造函数采用一个字符串参数并使用它来初始化受保护的成员。然后,Child 类在其自身构造过程中使用此构造函数来初始化其父类的受保护成员。
以上是如何在子类的构造函数中初始化父类的受保护成员?的详细内容。更多信息请关注PHP中文网其他相关文章!