Heim > Backend-Entwicklung > C++ > Hauptteil

Wann kann die Initialisierungsliste eines untergeordneten Klassenkonstruktors zum Initialisieren geschützter Datenelemente verwendet werden?

Linda Hamilton
Freigeben: 2024-10-24 13:59:02
Original
669 Leute haben es durchsucht

When Can the Initialization List of a Child Class Constructor Be Used to Initialize Protected Data Members?

Initialisierungsliste und geschützte Member-Initialisierung

Bei der objektorientierten Programmierung mit C ist es eine gängige Praxis, dass Klassen von übergeordneten Klassen erben und erweitern ihre Funktionalität. Es stellt sich jedoch die Frage: Kann die Initialisierungsliste des Konstruktors einer untergeordneten Klasse verwendet werden, um Datenelemente zu initialisieren, die in der übergeordneten Klasse als geschützt deklariert wurden?

Um dies zu erreichen, könnte man einen ähnlichen Code haben wie Folgendes:

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

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

Dieser Versuch führt jedoch zu einem Compilerfehler, der darauf hinweist, dass die Klasse „Child“ kein Feld mit dem Namen „some“ hat. Dies liegt daran, dass das Datenelement „something“ in der übergeordneten Klasse als geschützt deklariert ist.

Um geschützte Elemente mithilfe der Initialisierungsliste einer untergeordneten Klasse zu initialisieren, ist ein alternativer Ansatz erforderlich. Der übergeordneten Klasse kann ein Konstruktor mit der erforderlichen Initialisierung hinzugefügt werden, und dieser Konstruktor kann dann vom Konstruktor der untergeordneten Klasse aufgerufen werden. Dies kann durch Konstruktorweiterleitung erreicht werden:

<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>
Nach dem Login kopieren

In diesem geänderten Code wird der Parent-Klasse ein geschützter Konstruktor hinzugefügt, der einen Zeichenfolgenparameter entgegennimmt. Der Konstruktor der untergeordneten Klasse ruft dann mithilfe der Konstruktorweiterleitung den geschützten Konstruktor der übergeordneten Klasse auf, um das erforderliche Argument zu übergeben und das Datenelement „etwas“ zu initialisieren.

Das obige ist der detaillierte Inhalt vonWann kann die Initialisierungsliste eines untergeordneten Klassenkonstruktors zum Initialisieren geschützter Datenelemente verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!