Heim > Backend-Entwicklung > C++ > Wie kann ich Basisklassen-Mitgliedsvariablen von einem abgeleiteten Klassenkonstruktor ordnungsgemäß initialisieren?

Wie kann ich Basisklassen-Mitgliedsvariablen von einem abgeleiteten Klassenkonstruktor ordnungsgemäß initialisieren?

Patricia Arquette
Freigeben: 2024-12-06 08:09:13
Original
433 Leute haben es durchsucht

How Can I Properly Initialize Base Class Member Variables from a Derived Class Constructor?

Vererbung für die Initialisierung von Mitgliedsvariablen nutzen

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)
    {
    }

};
Nach dem Login kopieren

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.
    {
    } 
};
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage