初始化列表和受保护成员初始化
在使用 C 的面向对象编程中,类继承父类是一种常见的做法并扩展它们的功能。然而,出现了一个问题:子类构造函数的初始化列表可以用来初始化在父类中声明为 protected 的数据成员吗?
为了实现这一点,可能会有类似于以下的代码以下:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
但是,此尝试将导致编译器错误,表明类 Child 没有名为 Something 的字段。这是因为数据成员某些内容在父类中被声明为受保护的。
要使用子类的初始化列表初始化受保护的成员,需要另一种方法。可以将具有所需初始化的构造函数添加到父类,然后可以从子类的构造函数调用该构造函数。这可以通过构造函数转发来实现:
<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>
在这段修改后的代码中,Parent 类中添加了一个受保护的构造函数,并且它接受一个字符串参数。然后,子类的构造函数使用构造函数转发调用父类的受保护构造函数,以传递必要的参数并初始化某些数据成员。
以上是什么时候可以使用子类构造函数的初始化列表来初始化受保护的数据成员?的详细内容。更多信息请关注PHP中文网其他相关文章!