Heim >Backend-Entwicklung >C++ >Wie werden Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor korrekt initialisiert?
So initialisieren Sie Basisklassen-Mitgliedsvariablen im Konstruktor abgeleiteter Klassen
In der objektorientierten Programmierung gibt es häufig abgeleitete Klassen, die erben Basisklassen. Beim Erstellen eines Konstruktors in einer abgeleiteten Klasse ist es wichtig, die von der Basisklasse geerbten Mitgliedsvariablen ordnungsgemäß zu initialisieren.
Beachten Sie den folgenden Code:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
In diesem Beispiel die abgeleitete Klasse B versucht, die Mitgliedsvariablen a und b innerhalb seines eigenen Konstruktors zu initialisieren. Dies ist jedoch ein falscher Ansatz. Der richtige Weg, Basisklassen-Mitgliedsvariablen in einer abgeleiteten Klasse zu initialisieren, besteht darin, den Konstruktor der Basisklasse zu verwenden:
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes private: int a, b; // Keep these variables private in A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0. { } };
Indem man den Basisklassenkonstruktor zugänglich macht (geschützt oder öffentlich) und ihn im Konstruktor der abgeleiteten Klasse aufruft , initialisieren wir die geerbten Mitgliedsvariablen ordnungsgemäß. Dieser Ansatz stellt sicher, dass die Basisklasse ordnungsgemäß initialisiert wird, bevor der Code der abgeleiteten Klasse ausgeführt wird.
Beachten Sie, dass es nicht empfohlen wird, die Mitgliedsvariablen der Basisklasse in der abgeleiteten Klasse öffentlich zu machen (wie im falschen Beispiel), da dies zu Problemen führt Kapselungsprinzip, das den externen Zugriff auf geschützte oder private Daten ermöglicht.
Das obige ist der detaillierte Inhalt vonWie werden Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor korrekt initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!