0Pricing
C++ Academy · Lektion

Einfache und mehrfache Vererbung

Modellieren Sie Ist-ein-Beziehungen mit einfacher Vererbung und vermeiden Sie Fallstricke mehrfacher Vererbung.

Einfache und mehrfache Vererbung ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Vererbung?

Vererbung ermöglicht es einer Klasse (der abgeleiteten Klasse), eine andere Klasse (die Basisklasse) wiederzuverwenden und zu erweitern. Sie bildet „ist-ein“-Beziehungen ab.

class Animal {
public:
    void breathe() { std::cout << "breathing\n"; }
};

class Dog : public Animal {
public:
    void bark() { std::cout << "Woof!\n"; }
};

Öffentliche Vererbung

Verwenden Sie public, um eine „ist-ein“-Beziehung abzubilden – ein Dog ist ein Animal. Member behalten ihre Zugriffsebene in der abgeleiteten Klasse.

Geschützte und private Vererbung

protected- und private-Vererbung bilden „ist-implementiert-in-Begriffen-von“-Beziehungen ab und werden nur selten verwendet. Bevorzugen Sie in solchen Fällen Komposition.

Auf Member der Basisklasse zugreifen

Die abgeleitete Klasse kann jedes öffentliche oder geschützte Member der Basisklasse direkt verwenden.

Dog d;
d.breathe();    // inherited from Animal
d.bark();        // own member

Konstruktorreihenfolge

Konstruktoren der Basisklasse werden vor den Konstruktoren der abgeleiteten Klasse ausgeführt. Verwenden Sie die Member-Initialisierungsliste, um Argumente an die Basisklasse zu übergeben.

class Pet : public Animal {
    std::string name_;
public:
    Pet(std::string n) : Animal(), name_(std::move(n)) {}
};

Destruktorreihenfolge

Destruktoren werden in umgekehrter Reihenfolge ausgeführt – zuerst der Destruktor der abgeleiteten Klasse, dann der der Basisklasse. Machen Sie Destruktoren der Basisklasse zu virtual, wenn Sie über einen Zeiger auf die Basisklasse löschen.

Mehrfachvererbung

C++ ermöglicht es einer Klasse, von mehr als einer Basisklasse zu erben. Verwenden Sie dies sparsam, da es das Design komplizierter macht.

class Printable { public: virtual void print() = 0; };
class Serializable { public: virtual std::string serialize() = 0; };

class Document : public Printable, public Serializable {
    // implements both interfaces
};

Das Diamantproblem

Wenn zwei Basisklassen eine gemeinsame Basisklasse haben, enthält die abgeleitete Klasse zwei Kopien dieser Basisklasse. Lösen Sie dies mit virtueller Vererbung.

class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};   // D has ONE A, not two

Kosten virtueller Vererbung

Virtuelle Basisklassen verursachen zusätzlichen Aufwand – einen zusätzlichen Zeiger pro Objekt und eine zusätzliche Indirektion bei jedem Zugriff auf ein Member der Basisklasse. Vermeiden Sie sie, wenn möglich.

Komposition oder Vererbung

Oft ist eine „hat-ein“-Komposition einfacher als eine „ist-ein“-Vererbung. Ein Car hat einen Engine – leiten Sie Car nicht von Engine ab.

class Engine { /* ... */ };
class Car {
    Engine engine_;       // composition
};

Schnittstellenvererbung oder Implementierungsvererbung

Zwei häufige Einsatzmöglichkeiten:

  • Schnittstelle – von einer rein virtuellen Basisklasse ableiten, um einen Vertrag zu erfüllen
  • Implementierung – zur Wiederverwendung von Code ableiten (CRTP, Mixins)

Wann Sie Vererbung verwenden sollten

Verwenden Sie Vererbung, wenn:

  • eine echte „ist-ein“-Beziehung besteht
  • Sie Laufzeitpolymorphie über virtuelle Funktionen benötigen
  • die Basisklasse für Vererbung entworfen wurde

Kurzer Test

Welche Technik verhindert bei Mehrfachvererbung zwei Kopien einer gemeinsamen Basisklasse?

Zusammenfassung

Vererbung bildet mit öffentlicher Vererbung „ist-ein“-Beziehungen ab. Mehrfachvererbung ist erlaubt, aber das Diamantproblem erfordert virtuelle Vererbung. Bevorzugen Sie für „hat-ein“-Beziehungen und zur Wiederverwendung von Code die Komposition.

Häufig gestellte Fragen

Ist die Lektion „Einfache und mehrfache Vererbung“ kostenlos?

Ja — der vollständige Text von „Einfache und mehrfache Vererbung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Einfache und mehrfache Vererbung“?

Modellieren Sie Ist-ein-Beziehungen mit einfacher Vererbung und vermeiden Sie Fallstricke mehrfacher Vererbung. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Einfache und mehrfache Vererbung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einfache und mehrfache Vererbung
  2. Virtuelle Funktionen und die vtable
  3. Abstrakte Klassen und rein virtuelle Methoden
  4. Vererbung vs. Komposition: Kompromisse
← Zurück zu C++ Academy