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?

Oct 24, 2024 pm 07:15 PM

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&amp; 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!

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

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the types of values ​​returned by c language functions? What determines the return value? What are the types of values ​​returned by c language functions? What determines the return value? Mar 03, 2025 pm 05:52 PM

What are the types of values ​​returned by c language functions? What determines the return value?

Gulc: C library built from scratch Gulc: C library built from scratch Mar 03, 2025 pm 05:46 PM

Gulc: C library built from scratch

C language function format letter case conversion steps C language function format letter case conversion steps Mar 03, 2025 pm 05:53 PM

C language function format letter case conversion steps

What are the definitions and calling rules of c language functions and what are the What are the definitions and calling rules of c language functions and what are the Mar 03, 2025 pm 05:53 PM

What are the definitions and calling rules of c language functions and what are the

Where is the return value of the c language function stored in memory? Where is the return value of the c language function stored in memory? Mar 03, 2025 pm 05:51 PM

Where is the return value of the c language function stored in memory?

distinct usage and phrase sharing distinct usage and phrase sharing Mar 03, 2025 pm 05:51 PM

distinct usage and phrase sharing

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? Mar 12, 2025 pm 04:52 PM

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently?

How does the C   Standard Template Library (STL) work? How does the C Standard Template Library (STL) work? Mar 12, 2025 pm 04:50 PM

How does the C Standard Template Library (STL) work?

See all articles