Heim > Backend-Entwicklung > C++ > Hauptteil

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

Patricia Arquette
Freigeben: 2024-11-01 08:33:02
Original
159 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!