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!