RunTime Type Information

Wir haben uns ja bereits angesehen, wie virtuelle Ableitungen funktionieren. Über die vTable können ja die einzelnen virtuellen Methoden angesprungen werden. Zusätzlich enthält jedes Objekt, dass über mindestens eine virtuelle Funktion verfügt, auch eine Typinformation, die zur Laufzeit abgerufen werden kann.

Wenn wir also mit einer Basisklasse (z.B. Tier) arbeiten, so lässt sich trotzdem herausfinden, ob es sich um eine bestimmte Basisklasse handelt (z.B. Saeugetier oder auch Katze).

Hierfür gibt es zwei Möglichkeiten:

RTTI nur mit virtuellen Methoden

Wichtig ist hierbei zu wissen, dass C und C++ nach dem Grundsatz arbeiten, dass die Programme nichts können, was vom Entwickler nicht verlangt wurde. RTTI ist eine nette Beigabe, sobald ein Objekt virtuelle Funktionen besitzt, da jedes Objekt sowieso den Zeiger auf die vTable enthalten muss. Ohne virtuelle Funktionen kann RTTI jedoch nicht auf eine vTable zugreifen, die die Typinformation enthält.

Benötigt man nun RTTI, aber hat keine Funktionen, die virtuell gekennzeichnet werden, so kann man sich darauf beschränken, den Destruktor virtuell zu setzen. Grundsätzlich sollte man sich allerdings bewusst sein, dass die Typinformationen zur Laufzeit informativen Charakter haben - sie sollten für den Programmablauf keine Rolle spielen. Programmbereiche, die vom Objekttyp abhängig sind sollten in eine entsprechende virtuelle Methode ausgelagert werden!