Heim > Backend-Entwicklung > C++ > Wie sollten Basisklassen-Mitgliedsvariablen in abgeleiteten Klassenkonstruktoren initialisiert werden?

Wie sollten Basisklassen-Mitgliedsvariablen in abgeleiteten Klassenkonstruktoren initialisiert werden?

Susan Sarandon
Freigeben: 2024-12-05 04:20:10
Original
465 Leute haben es durchsucht

How Should Base Class Member Variables Be Initialized in Derived Class Constructors?

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

};
Nach dem Login kopieren

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:

  • Mitglieder der Basisklasse öffentlich machen: Ein Ansatz besteht darin Machen Sie die Mitgliedsvariablen der Basisklasse öffentlich, wie unten gezeigt:
class A
{
public:
    int a, b;
};

class B : public A
{
    B() : a(0), b(0)
    {
    }

};
Nach dem Login kopieren

Es ist jedoch nicht ratsam, Mitgliedsvariablen öffentlich zu machen, da dies gegen die Prinzipien der Kapselung und Sicherheit verstößt.

  • Basisklassenkonstruktor für die Initialisierung erstellen: Ein sichererer und empfohlener Ansatz besteht darin, in der Basisklasse einen Konstruktor zu erstellen, der Ableitungen ermöglicht Klassen zum Initialisieren von Mitgliedsvariablen der Basisklasse. Zum Beispiel:
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.
    {
    } 
};
Nach dem Login kopieren

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!

Quelle:php.cn
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