Beim Erben einer Klasse mit geschützten Datenelementen kann es wünschenswert sein, diese mithilfe der Initialisierungsliste des untergeordneten Elements zu initialisieren Konstruktor der Klasse. Dieser Ansatz führt jedoch häufig zu Kompilierungsfehlern.
In diesem Beispiel:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
Das Kompilieren dieses Codes führt zu einem Fehler, da die untergeordnete Klasse Child kein Mitglied mit dem Namen „some“ hat .
Um dieses Problem zu beheben, muss die übergeordnete Klasse Parent einen Konstruktor definieren, der das geschützte Mitglied etwas initialisiert. Dieser Konstruktor kann als geschützt deklariert werden, sodass abgeleitete Klassen darauf zugreifen können.
Der untenstehende geänderte Code wird erfolgreich kompiliert:
<code class="cpp">class Parent { protected: std::string something; Parent(const std::string& something) : something(something) {} }; class Child : public Parent { private: Child() : Parent("Hello, World!") {} };</code>
In diesem geänderten Code leitet der geschützte Konstruktor in der übergeordneten Klasse weiter das Initialisierungsargument für das Something-Mitglied, wodurch die untergeordnete Klasse das geschützte Mitglied der übergeordneten Klasse während ihrer eigenen Initialisierung initialisieren kann.
Durch Befolgen dieser Syntax wird es möglich, geschützte übergeordnete Mitglieder mithilfe der Initialisierungsliste der untergeordneten Klasse zu initialisieren größere Kontrolle und Flexibilität bei der Objektinitialisierung über Vererbungshierarchien hinweg.
Das obige ist der detaillierte Inhalt vonKönnen untergeordnete Klassen geschützte übergeordnete Mitglieder über Initialisierungslisten initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!