Heim > Backend-Entwicklung > C++ > Hauptteil

Wie initialisiere ich geschützte Mitglieder einer übergeordneten Klasse im Konstruktor einer untergeordneten Klasse?

Barbara Streisand
Freigeben: 2024-10-25 04:45:02
Original
275 Leute haben es durchsucht

How to Initialize Protected Members of a Parent Class in a Child Class's Constructor?

Geschützte Mitglieder mit Initialisierungsliste initialisieren

Bei der objektorientierten Programmierung können übergeordnete Klassen geschützte Mitglieder haben, auf die untergeordnete Klassen zugreifen können. Beim Initialisieren untergeordneter Objekte kann es wünschenswert sein, auch die in der übergeordneten Klasse deklarierten geschützten Mitglieder zu initialisieren. Dies ist jedoch nicht so einfach, wie es scheint.

Betrachten Sie das folgende Beispiel:

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

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

In diesem Beispiel versuchen wir, das geschützte Mitglied etwas von der übergeordneten Klasse mithilfe der Initialisierung zu initialisieren Liste des Konstruktors der untergeordneten Klasse. Der Compiler meldet jedoch einen Fehler: Die Klasse „Child“ verfügt über kein Feld mit dem Namen „something“. Dieser Fehler tritt auf, weil das geschützte Mitglied „something“ nicht in der untergeordneten Klasse deklariert ist und daher in der Initialisierungsliste nicht sichtbar ist.

Lösung

Um geschützte Mitglieder von a zu initialisieren Um eine übergeordnete Klasse innerhalb des Konstruktors einer untergeordneten Klasse zu erstellen, müssen wir der übergeordneten Klasse einen Konstruktor (vorzugsweise geschützt) hinzufügen, der die erforderlichen Parameter zum Initialisieren dieser Mitglieder übernimmt. Die untergeordnete Klasse kann dann diesen Konstruktor verwenden, um die entsprechenden Werte zu übergeben.

Hier ist eine überarbeitete Implementierung:

<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>
Nach dem Login kopieren

In diesem Beispiel haben wir der übergeordneten Klasse einen geschützten Konstruktor hinzugefügt, der übernimmt einen String-Parameter und verwendet ihn, um das geschützte Mitglied zu initialisieren. Die untergeordnete Klasse verwendet dann diesen Konstruktor, um das geschützte Mitglied ihrer übergeordneten Klasse während ihrer eigenen Konstruktion zu initialisieren.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich geschützte Mitglieder einer übergeordneten Klasse im Konstruktor einer untergeordneten Klasse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!