Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verwende ich Basisklassenkonstruktoren und Zuweisungsoperatoren in abgeleiteten Klassen in C?

Wie verwende ich Basisklassenkonstruktoren und Zuweisungsoperatoren in abgeleiteten Klassen in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-01 08:33:02160Durchsuche

How do I use Base Class Constructors and Assignment Operators in Derived Classes in C  ?

Verwenden von Basisklassenkonstruktoren und Zuweisungsoperatoren in C

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.

Expliziter Aufruf

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>

Implizite Verwendung

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!

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