Initialisierung von Basisklassen-Mitgliedsvariablen in abgeleiteten Klassenkonstruktoren
In der objektorientierten Programmierung ermöglicht die Vererbung, dass abgeleitete Klassen Eigenschaften und Verhaltensweisen erben Basisklassen. Allerdings kann das Initialisieren von Basisklassen-Mitgliedsvariablen innerhalb abgeleiteter Klassenkonstruktoren manchmal eine Herausforderung darstellen.
Warum können Basisklassen-Mitgliedsvariablen in abgeleiteten Klassenkonstruktoren nicht initialisiert werden?
Betrachten Sie das folgende Beispiel:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
In diesem Code versucht Klasse B, die Mitgliedsvariablen a und b der Basisklasse innerhalb ihres Codes zu initialisieren Eigener Konstruktor mit der Syntax: A(), a(0), b(0). Dieser Ansatz ist jedoch falsch. Der Grund dafür ist, dass a und b keine Mitglieder der Klasse B, sondern der Klasse A sind. Nur Klasse A kann diese Variablen direkt initialisieren.
Best Practices für die Initialisierung
Um dieses Problem anzugehen, gibt es einige empfohlene Ansätze:
class A { public: int a, b; }; class B : public A { B() : a(0), b(0) { } };
Es ist jedoch nicht ratsam, Mitgliedsvariablen öffentlich zu machen, da dies gegen die Prinzipien der Kapselung und Sicherheit verstößt.
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. { } };
Dieser Ansatz ermöglicht es abgeleiteten Klassen, Mitgliedsvariablen der Basisklasse zu initialisieren, indem sie den Basisklassenkonstruktor mit den gewünschten Anfangswerten aufrufen.
Das obige ist der detaillierte Inhalt vonWie sollten Basisklassen-Mitgliedsvariablen in abgeleiteten Klassenkonstruktoren initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!