在子类的初始化列表中初始化父类的受保护数据成员
在面向对象编程中,派生类可以继承基类的功能。经常出现的一个问题是是否可以使用子类构造函数的初始化列表来初始化父类的受保护数据成员。
考虑以下代码示例:
<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”类的构造函数会初始化“something”受保护数据成员。因此,子类从其父类继承了初始化的“something”数据成员。
以上是受保护的父类成员可以通过子类的初始化列表进行初始化吗?的详细内容。更多信息请关注PHP中文网其他相关文章!