Heim >Backend-Entwicklung >C++ >Wie werden Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor ordnungsgemäß initialisiert?

Wie werden Basisklassen-Mitgliedsvariablen in einem abgeleiteten Klassenkonstruktor ordnungsgemäß initialisiert?

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 21:54:12261Durchsuche

How to Properly Initialize Base Class Member Variables in a Derived Class Constructor?

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!

Stellungnahme:
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