Latest web development tutorials

C ++ Erbe

Objektorientierte Programmierung ist das wichtigste Konzept vererbt wird. Die Vererbung ermöglicht es uns, eine Klasse in eine andere Klasse Basis zu definieren, die die Erstellung und Pflege einfacher, eine Anwendung macht. Dazu erreichte auch die Wiederverwendung von Code-Funktionalität und zur Verbesserung der Ausführungszeit Ergebnisse.

Wenn Sie eine Klasse zu erstellen, müssen Sie nicht neu zu schreiben neue Datenelemente und Elementfunktionen geben lediglich an, die neue Klasse erbt können eine vorhandene Mitglied der Klasse sein. Die bestehende Klasse istdie Basisklasse bezeichnet wird ,wird die neue Klassedie abgeleitete Klasse genannt.

Vererbungist ein Vertreter der Beziehung.Zum Beispiel ist das Säugetier ein Tier, ein Hund ein Säugetier ist daher ein Hund ein Tier ist, und so weiter.

& Abgeleiteten Klasse Basisklasse

Eine Klasse kann aus mehr als einer Klasse abgeleitet werden, was bedeutet, dass sie die Daten und Funktionen von mehreren Basisklassen erben können. Definiert eine abgeleitete Klasse, verwenden wir eine abgeleitete Klasse Liste, um eine Basisklasse angeben. Klasse Ableitung Liste mit einer oder mehreren Basisklasse die folgende Formular mit dem Namen:

class derived-class: access-specifier base-class

Wobei das Zugriffsmodifikator Zugriffsbezeichöffentlich, geschützt oder privatein, Basisklasse ist vor dem Namen einer Klasse definiert. Wenn kein Zugriffsmodifikator access-Spezifizierer ist der Standard privat.

Angenommen , Sie eine BasisklasseForm haben, Rechteckseine abgeleiteten Klassen, wie folgt:

#include <iostream>
 
using namespace std;

// 基类
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 派生类
class Rectangle: public Shape
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Total area: 35

Zutrittskontrolle und Vererbung

Abgeleitete Klasse kann die Basisklasse Zugang für alle nicht-private Mitglieder. Also, wenn Sie sollten in der Basisklasse deklariert werden ein Mitglied einer Basisklasse Elementfunktionen der abgeleiteten Klasse den Zugriff auf sein wollen, ist privat.

Wir können die unterschiedlichen Zugriffsrechten entsprechend der Art des Zugangs zusammenfassen wie folgt:

访问publicprotectedprivate
同一个类yesyesyes
派生类yesyesno
外部的类yesnono

Eine abgeleitete Klasse erbt alle Basisklassenmethode, außer in den folgenden Fällen:

  • Basisklassenkonstruktor und destructor und Copy-Konstruktor.
  • Die überladene der Basisklasse Betreiber.
  • Freund der Funktion der Basisklasse.

Art der Vererbung

Wenn eine Klasse von der Basisklasse abgeleitet ist, kann die Basisklasse alsöffentliche vererbt werden, geschütztoderprivatenTypen. Durch die obige Erklärung Art des Zugriffs Modifikator Zugriffsbezeich geerbt zu spezifizieren.

Wir verwenden kaumgeschützt oder privateVererbung ist in der RegelöffentlicheVererbung verwendet. Wenn verschiedene Arten der Vererbung, befolgen Sie die folgenden Regeln:

  • Öffentliche Erbe (öffentlich): protectedMitglieder , wenn eine Klasse von eineröffentlichenBasisklasse abgeleitet ist,öffentlicheMitglieder der Basisklasse ist dieöffentlicheMitglieder einer Klasse abgeleitet,geschützteElemente der Basisklasse ist die abgeleitete Klasse,die privatenMitglieder einer Basisklasse kann nicht direkt abgeleiteten Klasse werden Zugang, kann aber durch den Aufrufderöffentlichen undgeschütztenMitglieder der Basisklasse zugegriffen werden.
  • Geschützte Erbschaft (geschützt): Wenn eine Klasse von der Basisklasse Schutz abgeleitet,die öffentlichen undgeschütztenMember der BasisklassegeschützteElementederabgeleiteten Klasse wird.
  • Privat Erbe (privat): Wenn eine Klasse von einer Basisklasse privaten,öffentlichen undgeschütztenMember der Basisklasse abgeleitet ist ,privateMitglieder der abgeleiteten Klasse sein wird.

Mehrfachvererbung

Mehrfachvererbung, das ist, kann eine Unterklasse mehr als eine Elternklasse haben, die die Eigenschaften von mehr als einer übergeordneten Klasse erbt.

C ++ Klasse können von mehr als einer Klasse Mitglied erben die folgende Syntax:

class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

Wobei das Zugriffsmodifikator Erbeöffentlich, geschützt oder privatein, verwendet , um jede Basisklasse zu dekorieren, die Basisklasse zwischen jeweils durch ein Komma getrennt, wie oben gezeigt. Nun wollen wir in den folgenden Beispielen sehen lassen:

#include <iostream>
 
using namespace std;

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};

// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};

// 派生类
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};

int main(void)
{
   Rectangle Rect;
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);

   area = Rect.getArea();
   
   // 输出对象的面积
   cout << "Total area: " << Rect.getArea() << endl;

   // 输出总花费
   cout << "Total paint cost: $" << Rect.getCost(area) << endl;

   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Total area: 35
Total paint cost: $2450