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

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

Barbara Streisand
Release: 2024-10-24 19:15:02
Original
755 people have browsed it

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>
Copy after login

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>
Copy after login

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!

source:php
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template