In der objektorientierten Programmierung ermöglicht die Vererbung, dass Klassen die Eigenschaften und Methoden ihrer Basisklassen erben. Diese leistungsstarke Funktion ermöglicht die Wiederverwendung und Wartbarkeit von Code. Der Umgang mit Konstruktoren und Zuweisungsoperatoren in geerbten Klassen kann jedoch eine Herausforderung sein.
Stellen Sie sich eine Klasse B mit einer Reihe von Konstruktoren und einem Zuweisungsoperator vor. Das Ziel besteht darin, eine erbende Klasse D zu erstellen, die foo() überschreibt, aber die Konstruktoren und Zuweisungsoperatoren von B beibehält.
Eine Möglichkeit, dies zu erreichen, besteht darin, die Konstruktoren und Zuweisungsoperatoren explizit aufzurufen in D. Dazu gehört das manuelle Aufrufen des entsprechenden Basisklassenkonstruktors beim Erstellen von Instanzen von D und die Verwendung von Base::operator=(), um Werte im Zuweisungsoperator zuzuweisen.
<code class="cpp">class Base { // ... public: Base(const Base&) { /*...*/ } Base& operator=(const Base&) { /*...*/ } }; class Derived : public Base { int additional_; public: Derived(const Derived& d) : Base(d) // dispatch to base copy constructor , additional_(d.additional_) { } Derived& operator=(const Derived& d) { Base::operator=(d); additional_ = d.additional_; return *this; } };</code>
Interessanterweise generiert der Compiler diese automatisch, auch ohne explizite Definition von Konstruktoren und Zuweisungsoperatoren. Dies ist bei Klassen mit einfacher Vererbung und minimaler Anpassung der Fall.
<code class="cpp">class ImplicitBase { int value_; // No operator=() defined }; class Derived : public ImplicitBase { const char* name_; public: Derived& operator=(const Derived& d) { ImplicitBase::operator=(d); // Call compiler generated operator= name_ = strdup(d.name_); return *this; } }; </code>
Daher ist es beim Erben von einer Basisklasse, die einen umfassenden Satz von Konstruktoren und einen Zuweisungsoperator bereitstellt, möglich, diese im zu verwenden abgeleitete Klasse, ohne sie neu schreiben zu müssen, solange in diesen Funktionen keine zusätzliche Funktionalität erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie verwende ich Basisklassenkonstruktoren und Zuweisungsoperatoren in abgeleiteten Klassen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!