0Pricing
C++ Academy · Lektion

Vererbung vs. Komposition: Kompromisse

Vergleichen Sie Vererbung und Komposition und wählen Sie das passende Werkzeug für den Entwurf.

Vererbung vs. Komposition: Kompromisse ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Zwei Möglichkeiten zur Wiederverwendung von Code

Sie können Code wiederverwenden, indem Sie von einer anderen Klasse erben oder ihn als Member komponieren. Beide Ansätze haben ihre Berechtigung.

Vererbung: „Ist-ein“

Verwenden Sie Vererbung, wenn die abgeleitete Klasse tatsächlich eine spezielle Art der Basisklasse ist.

class Vehicle {};
class Car : public Vehicle {};       // a Car IS a Vehicle
class SportsCar : public Car {};

Komposition: „Hat-ein“

Verwenden Sie Komposition, wenn die Beziehung „hat-ein“ oder „verwendet-ein“ lautet.

class Engine {};
class Car {
    Engine engine_;                  // a Car HAS an Engine
};

Abwägung bei der Kopplung

Vererbung erzeugt enge Kopplung – abgeleitete Klassen hängen von den Interna der Basisklasse ab. Komposition hält Module unabhängig und leichter änderbar.

Flexibilität

Komposition ermöglicht es, Verhalten zur Laufzeit zu ändern – tauschen Sie das komponierte Objekt aus. Vererbung bindet das Verhalten zur Compile-Zeit.

class Logger {
    std::unique_ptr<LogSink> sink_;   // can swap implementations
public:
    void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};

Testbarkeit

Komponierte Objekte können zum Testen durch Mocks ersetzt werden. Von Basisklassen abgeleitete Klassen lassen sich ohne virtuelle Funktionen oder Templates schwerer mocken.

Das Problem der fragilen Basisklasse

Änderungen an einer Basisklasse können viele abgeleitete Klassen beschädigen. Komposition begrenzt Änderungen auf die Klasse, die das Objekt komponiert.

Wann Sie Vererbung wählen sollten

Vererbung passt, wenn:

  • eine klare „ist-ein“-Beziehung besteht
  • Polymorphismus über eine Basisschnittstelle benötigt wird
  • die Basisklasse ausdrücklich für Vererbung entworfen wurde

Wann Sie Komposition wählen sollten

Komposition passt, wenn:

  • Sie Implementierungen flexibel austauschen möchten
  • die Beziehung „hat-ein“ oder „verwendet-ein“ lautet
  • Sie geringe Kopplung und einfacheres Testen wünschen

Das Strategiemuster

Kombinieren Sie Komposition mit Polymorphismus: Speichern Sie einen Zeiger auf die Basisklasse eines Strategieobjekts, das die Hostklasse komponiert.

class Sorter {
    std::unique_ptr<SortStrategy> strategy_;
public:
    void sort(std::vector<int>& v) { strategy_->execute(v); }
};

Mixins und Policy-Klassen

Verwenden Sie für Anpassungen zur Compile-Zeit als Templates parametrisierte Policy-Klassen – Komposition auf Typebene. Leistungsfähig und ohne Laufzeitaufwand.

Schnittstelle und Komposition

Ein häufiges modernes Muster: Definieren Sie eine Schnittstelle (abstrakte Basisklasse) und komponieren Sie konkrete Klassen, die sie implementieren. Vererbung für die Schnittstelle, Komposition für die Implementierung.

Kurzer Test

Welcher Ansatz bietet im Allgemeinen mehr Flexibilität und eine lockerere Kopplung?

Zusammenfassung

Vererbung bildet „ist-ein“-Beziehungen ab, Komposition „hat-ein“-Beziehungen. Komposition ist flexibler und führt zu geringerer Kopplung – bevorzugen Sie sie zur Wiederverwendung von Code. Verwenden Sie Vererbung für Polymorphismus über eine Schnittstelle, häufig kombiniert mit komponierten Implementierungen.

Häufig gestellte Fragen

Ist die Lektion „Vererbung vs. Komposition: Kompromisse“ kostenlos?

Ja — der vollständige Text von „Vererbung vs. Komposition: Kompromisse“ 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 „Vererbung vs. Komposition: Kompromisse“?

Vergleichen Sie Vererbung und Komposition und wählen Sie das passende Werkzeug für den Entwurf. 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 4 von 4.

Wie lange dauert die Lektion „Vererbung vs. Komposition: Kompromisse“?

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