Heim >Backend-Entwicklung >C++ >Wie sollten Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor initialisiert werden?
Initialisierung von Basisklassen-Mitgliedsvariablen im abgeleiteten Klassenkonstruktor
In der objektorientierten Programmierung kommt es häufig zu Vererbungsbeziehungen zwischen Klassen. Wenn eine abgeleitete Klasse erstellt wird, ist es wichtig, die von ihrer Basisklasse geerbten Mitgliedsvariablen ordnungsgemäß zu initialisieren. Der Versuch, Basisklassenmitglieder direkt im abgeleiteten Klassenkonstruktor zu initialisieren, kann jedoch zu Fehlern führen.
Betrachten Sie das folgende Codebeispiel:
class A { public: int a, b; }; class B : public A { public: B() : A(), a(0), b(0) { } };
Beim Versuch, diesen Code zu kompilieren, wird dies zu einem Ergebnis führen in einem Fehler, da der abgeleitete Klassenkonstruktor Mitglieder der Basisklasse nicht direkt initialisieren kann. Dies liegt daran, dass die Basisklassenmitglieder für die abgeleitete Klasse nicht zugänglich sind.
Um dieses Problem zu beheben, sollten Sie einen Konstruktor in der Basisklasse erstellen, der es abgeleiteten Klassen ermöglicht, die geerbten Mitglieder zu initialisieren. Der folgende modifizierte Code veranschaulicht diesen Ansatz:
class A { protected: A(int a, int b) : a(a), b(b) {} private: int a, b; }; class B : public A { public: B() : A(0, 0) { } };
Jetzt kann die abgeleitete Klasse B die geerbten Mitglieder a und b initialisieren, indem sie den Konstruktor der Basisklasse A aufruft. Indem sie den Konstruktor in A als geschützt deklariert, Es ist für abgeleitete Klassen zugänglich, jedoch nicht für andere Klassen außerhalb der Vererbungshierarchie. Alternativ können Sie den A-Konstruktor als öffentlich deklarieren, um eine externe Instanziierung zu ermöglichen.
Mit diesem Ansatz können Sie eine ordnungsgemäße Initialisierung geerbter Mitglieder sicherstellen und gleichzeitig die Kapselung beibehalten und den direkten Zugriff auf private Variablen von außerhalb der Klasse verhindern.
Das obige ist der detaillierte Inhalt vonWie sollten Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!