Konvertierungen und RTTI
Statische und dynamische Konvertierungen
Wozu dynamisches Typmanagement?
Dynamische abgesicherte (überprüfbare) Downcasts
- also Konvertierung der durch den Container gelieferten oder an den
Container übergebenen Pointer auf GeoObj-Objekte zurück zu den
Typen der real referenzierten Objekte
- Konvertierung in diese Richtung notwendig, wenn
- Menge der vom Container akzeptierten konkreten Typen eingegrenzt
werden soll
- nicht-virtuelle Methoden typselektiv entsprechend der real referenzierten
Objekte gerufen werden sollen
- weitere Aspekte: dynamische Vergleiche, Streaming, Erzeugung etc.
- ein Downcast kann auf zwei verschiedenen Wegen durchgeführt werden:
- traditionelle explizite Konvertierung:
z.B. C* pC = (C*)pA;
-
- ist gefährlich und ein grober Fehler, wenn durch
pA nicht wirklich ein Objekt der Klasse C referenziert wird
- mit RTTI: dynamische explizite Konvertierung:
z.B. C* pC = dynamic_cast<C*>(pA);
-
- ist rel. sicher, da im Fehlerfalle eines Pointercasts
ein NULL-Pointer zurückgeliefert und im Fehlerfalle eines Referenzcasts eine
Ausnahme ausgeworfen wird