🎭 Vererbung & Dynamischer Dispatch

C++ 07: Vererbung, Virtual & Polymorphismus

Lerne echte Polymorphie in C++: Virtuelle Tabellen (vtable), Pure Virtual Methods (= 0), abstrakte Schnittstellen und die überlebenswichtige Regel der virtuellen Destruktoren.

🎭 1. Dynamische Bindung & Virtuelle Methoden

In C++ erfolgt der Methodenaufruf standardmäßig zur Compile-Zeit (statische Bindung). Erst durch das Schlüsselwort virtual aktiviert man dynamischen Dispatch über eine VTable (Virtual Method Table). Dadurch wird zur Laufzeit die Methode der tatsächlich abgeleiteten Klasse aufgerufen, selbst wenn der Aufruf über einen Basisklassen-Zeiger (Basis*) erfolgt.

🎮 Didaktische Analogie: Der universelle Game-Controller

Der Basis-Treiber kennt den Befehl 'Feuern()'. Ob hinter dem Controller ein Rennwagen mit Lichthupe, ein Raumschiff mit Laser oder ein Krieger mit Schwert hängt, entscheidet erst das konkrete Unterobjekt zur Laufzeit über seine virtuelle Tabelle!

⚡ 2. C / C++ Quick-Cheat-Sheet

Syntax / Anweisung Bedeutung & Funktion
virtual void render() const;Ermöglicht dynamisches Überschreiben in Subklassen über die VTable.
void render() const override;C++11 override-Schlüsselwort: Lässt den Compiler prüfen, ob eine Basis-Methode exakt existiert.
virtual double flaeche() const = 0;Pure Virtual: Macht die Klasse abstrakt (Interface-Definition).
virtual ~Basis() = default;Virtueller Destruktor: Verhindert Undefined Behavior beim Löschen über Basis-Zeiger.

⚠️ 3. Häufige Stolperfallen & Anti-Patterns

⚠️ Fehlender virtueller Destruktor

Wird ein abgeleitetes Objekt über einen Basis* mit delete freigegeben und ist der Destruktor der Basisklasse nicht virtuell, wird der Subklassen-Destruktor NIEMALS aufgerufen! Ressourcen der Subklasse leaken sofort.

⚠️ Vergessen von override

Ändert sich die Signatur der Basismethode minimal (z.B. const hinzugefügt), wird ohne override eine neue Methode überladen statt die alte überschrieben. Bugs bleiben bis zur Laufzeit unbemerkt!

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis zu Speichersicherheit, Syntax und Systems-Design mit gezieltem Feedback:

🎯 Aufgaben & Checkliste

💻 In Web-IDE öffnen → ← C++ 06 C++ 08 →