Bei der objektorientierten Programmierung besteht eine häufige Aufgabe darin, Mitgliedsvariablen der Basisklasse im Konstruktor der abgeleiteten Klasse zu initialisieren. Bestimmte Szenarien können diese Initialisierung jedoch verhindern. Lassen Sie uns ein solches Szenario und eine empfohlene Lösung untersuchen.
Betrachten Sie den folgenden Codeausschnitt:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
Hier versucht das Programm, die Mitgliedsvariablen a und b der Basisklasse A darin zu initialisieren der Konstruktor der abgeleiteten Klasse B. Dieser Ansatz schlägt jedoch mit einem Kompilierungsfehler fehl.
Der Grund für diesen Fehler liegt in der Tatsache, dass a und b identisch sind keine Mitglieder von B. Sie sind Mitglieder der Basisklasse A. Daher hat nur der Konstruktor von A die Berechtigung, sie zu initialisieren.
Anstatt a und b direkt im abgeleiteten Klassenkonstruktor zu initialisieren, ist ein effektiver Die Lösung besteht darin, sie als geschützte Mitglieder in der Basisklasse zu deklarieren und einen Konstruktor innerhalb der Basisklasse für die Initialisierung zu verwenden. Dieser Ansatz ermöglicht es abgeleiteten Klassen, durch Vererbung auf diese Variablen zuzugreifen und diese zu initialisieren.
Hier ist ein überarbeiteter Codeausschnitt, der diesen verbesserten Ansatz demonstriert:
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes // Change "protected" to "public" to allow others to instantiate A. 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. { } };
In diesem überarbeiteten Code der Konstruktor der Basis Klasse A nimmt zwei ganzzahlige Argumente und initialisiert die Mitgliedsvariablen a und b entsprechend. Die abgeleitete Klasse B erbt den geschützten Konstruktor von A und ruft ihn innerhalb ihres eigenen Konstruktors auf, um a und b mit den Standardwerten 0 zu initialisieren.
Dieser Ansatz gewährleistet die ordnungsgemäße Initialisierung von Mitgliedsvariablen unter Beibehaltung der Kapselung und hält sich an die Prinzipien der objektorientierten Programmierung.
Das obige ist der detaillierte Inhalt vonWie kann ich Basisklassen-Mitgliedsvariablen von einem abgeleiteten Klassenkonstruktor ordnungsgemäß initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!