Heim >Backend-Entwicklung >C++ >Wie werden Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor ordnungsgemäß initialisiert?
Initialisierung von Basisklassen-Mitgliedsvariablen im Konstruktor abgeleiteter Klassen
Bei der Arbeit mit der Klassenvererbung stellt sich häufig die Frage: Wie wird die Basisklasse initialisiert? Mitgliedsvariablen innerhalb eines abgeleiteten Klassenkonstruktors. Ein erster Versuch, dies zu tun, kann zu Verwirrung führen, wie unten gezeigt:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
Dieser Code kann nicht kompiliert werden, was die Frage aufwirft: Warum können wir a und b in B nicht initialisieren?
Der Grund liegt in der Tatsache, dass a und b keine Mitglieder von B sind. Sie gehören zur Basisklasse A. Nur A kann seine eigenen Mitgliedsvariablen initialisieren.
Eine mögliche Lösung ist: Machen Sie a und b zu öffentlichen Mitgliedern von A, sodass B Werte direkt zuweisen kann. Dies wird jedoch nicht empfohlen, da es das Kapselungsprinzip verletzt.
Stattdessen besteht ein robusterer Ansatz darin, einen Konstruktor in A zu definieren, der es abgeleiteten Klassen ermöglicht, Initialisierungswerte anzugeben. Dies kann erreicht werden, indem der Konstruktor geschützt und für Unterklassen zugänglich gemacht wird:
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes private: int a, b; // Keep variables private within A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, setting a and b to 0 within A { } };
Diese Lösung stellt sicher, dass a und b innerhalb von A korrekt initialisiert werden, wodurch Datenintegrität und Kapselung gewährleistet werden.
Das obige ist der detaillierte Inhalt vonWie werden Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor ordnungsgemäß initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!