Home  >  Article  >  Backend Development  >  Can Protected Parent Members be Initialized Using Child\'s Initialization List?

Can Protected Parent Members be Initialized Using Child\'s Initialization List?

Barbara Streisand
Barbara StreisandOriginal
2024-10-24 19:15:02639browse

Can Protected Parent Members be Initialized Using Child's Initialization List?

Initializing Protected Parent Members with Child's Initialization List

In object-oriented programming, you may need to initialize protected members declared in a parent class from the constructor of a child class. This is a common scenario, but the question arises: can this be achieved using the child class's initialization list?

Let's consider the following example:

<code class="cpp">class Parent {
protected:
    std::string something;
};

class Child : public Parent {
private:
    Child() : something("Hello, World!") {}
};</code>

When attempting to compile this code, the compiler reports an error: "class 'Child' does not have any field named 'something'". This error indicates that the compiler cannot locate the something member within the Child class.

The issue here lies in the inability for the child class's initialization list (: something("Hello, World!")) to access protected members of the parent class. This is because the initialization list initializes private members of the child class itself, and protected members of the parent class are not accessible from the private section of the child class.

Solution: Forwarding Constructor

To overcome this issue, you can use a forwarding constructor in the parent class to pass the initialization values to the protected member:

<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>

With this approach, the Child class's constructor calls the Parent class's constructor through the Parent("Hello, World!") syntax. This initialization passes the something parameter to the parent class's constructor, which then initializes the protected something member.

The above is the detailed content of Can Protected Parent Members be Initialized Using Child\'s Initialization List?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn