Heim  >  Artikel  >  Backend-Entwicklung  >  Können geschützte übergeordnete Klassenmitglieder über die Initialisierungsliste der untergeordneten Klasse initialisiert werden?

Können geschützte übergeordnete Klassenmitglieder über die Initialisierungsliste der untergeordneten Klasse initialisiert werden?

DDD
DDDOriginal
2024-10-25 06:07:02751Durchsuche

Can Protected Parent Class Members Be Initialized via Child Class's Initialization List?

Initialisieren der geschützten Datenelemente der übergeordneten Klasse in der Initialisierungsliste der untergeordneten Klasse

In der objektorientierten Programmierung können abgeleitete Klassen Funktionen von ihren Basisklassen erben . Eine häufig gestellte Frage ist, ob es möglich ist, geschützte Datenelemente der übergeordneten Klasse mithilfe der Initialisierungsliste des Konstruktors der untergeordneten Klasse zu initialisieren.

Betrachten Sie das folgende Codebeispiel:

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

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

Wann Beim Versuch, diesen Code zu kompilieren, gibt der Compiler einen Fehler aus, der besagt, dass die „Child“-Klasse kein Datenelement mit dem Namen „something“ enthält. Dies liegt daran, dass die Initialisierungsliste nur Datenelemente innerhalb der untergeordneten Klasse selbst initialisieren darf.

Um die gewünschte Funktionalität zu erreichen, ist es notwendig, der übergeordneten Klasse einen Konstruktor hinzuzufügen, der den gewünschten Anfangswert akzeptiert und weiterleitet zum Datenelement der Basisklasse. Beispiel:

<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 Fall initialisiert der Konstruktor der „Parent“-Klasse das „something“-geschützte Datenelement, wenn er aus der Initialisierungsliste der Child-Klasse aufgerufen wird. Somit erbt die untergeordnete Klasse das initialisierte Datenelement „etwas“ von ihrer übergeordneten Klasse.

Das obige ist der detaillierte Inhalt vonKönnen geschützte übergeordnete Klassenmitglieder über die Initialisierungsliste der untergeordneten Klasse initialisiert 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