Heim >Backend-Entwicklung >C++ >Können geschützte übergeordnete Mitglieder mithilfe der Initialisierungsliste des untergeordneten Elements initialisiert werden?
Geschützte übergeordnete Mitglieder mit der Initialisierungsliste des Kindes initialisieren
Bei der objektorientierten Programmierung müssen Sie möglicherweise geschützte Mitglieder initialisieren, die in einer übergeordneten Klasse deklariert sind vom Konstruktor einer untergeordneten Klasse. Dies ist ein häufiges Szenario, aber es stellt sich die Frage: Kann dies mithilfe der Initialisierungsliste der untergeordneten Klasse erreicht werden?
Betrachten wir das folgende Beispiel:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
Beim Versuch, diesen Code zu kompilieren, Der Compiler meldet einen Fehler: „Klasse ‚Kind‘ hat kein Feld mit dem Namen ‚etwas‘“. Dieser Fehler weist darauf hin, dass der Compiler das Something-Mitglied innerhalb der Child-Klasse nicht finden kann.
Das Problem liegt hier darin, dass der Zugriff auf die Initialisierungsliste der Child-Klasse (: Something("Hello, World!")) nicht geschützt ist Mitglieder der Elternklasse. Dies liegt daran, dass die Initialisierungsliste private Mitglieder der untergeordneten Klasse selbst initialisiert und geschützte Mitglieder der übergeordneten Klasse nicht über den privaten Abschnitt der untergeordneten Klasse zugänglich sind.
Lösung: Weiterleitungskonstruktor
Um dieses Problem zu lösen, können Sie einen Weiterleitungskonstruktor in der übergeordneten Klasse verwenden, um die Initialisierungswerte an das geschützte Mitglied zu übergeben:
<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>
Bei diesem Ansatz ruft der Konstruktor der untergeordneten Klasse die auf Der Konstruktor der übergeordneten Klasse über die Parent("Hello, World!")-Syntax. Diese Initialisierung übergibt den Something-Parameter an den Konstruktor der übergeordneten Klasse, der dann das geschützte Something-Mitglied initialisiert.
Das obige ist der detaillierte Inhalt vonKönnen geschützte übergeordnete Mitglieder mithilfe der Initialisierungsliste des untergeordneten Elements initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!