🎭 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.
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
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.
Ä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: