Heim  >  Artikel  >  Backend-Entwicklung  >  Wann kann die Initialisierungsliste eines untergeordneten Klassenkonstruktors zum Initialisieren geschützter Datenelemente verwendet werden?

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

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 13:59:02670Durchsuche

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>

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>

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!

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