首页 > 后端开发 > C++ > 正文

如何在子类的构造函数中初始化父类的受保护成员?

Barbara Streisand
发布: 2024-10-25 04:45:02
原创
355 人浏览过

How to Initialize Protected Members of a Parent Class in a Child Class's Constructor?

使用初始化列表初始化受保护成员

在面向对象编程中,父类可以拥有可由子类访问的受保护成员。当初始化子对象时,可能还需要初始化在父类中声明的受保护成员。然而,这并不像看起来那么简单。

考虑以下示例:

<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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板