dynamic_cast (C++-Typumwandlungsoperator)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Kategorie

C++-spezifische Schlüsselwörter

Beschreibung

In dem Ausdruck

dynamic_cast< T > (ptr) 

muss T ein Zeiger oder eine Referenz auf einen definierten Klassentyp oder auf void* sein. Das Argument ptr muss ein Ausdruck sein, dessen Auswertung einen Zeiger oder eine Referenz ergibt.

Wenn T ein Zeiger auf void* ist, muss ptr ebenfalls ein Zeiger sein. In diesem Fall kann man über den Zeiger auf jedes Element derjenigen Klasse zugreifen, die in der Klassenhierarchie die unterste ist. Eine solche Klasse kann nicht Basisklasse irgendeiner anderen Klasse sein.

Umwandlungen einer abgeleiteten Klasse in eine Basisklasse oder einer abgeleiteten Klasse in eine andere abgeleitete Klasse, werden wie folgt vorgenommen: Wenn T ein Zeiger ist und ptr ein Zeiger auf eine Nicht-Basisklasse ist, die ein Element der Klassenhierarchie ist, so ist das Ergebnis ein Zeiger auf eine eindeutige Unterklasse. Referenzen werden ähnlich behandelt. Wenn T eine Referenz ist und ptr eine Referenz auf eine Nicht-Basisklasse, so ist das Ergebnis eine Referenz auf die eindeutige Unterklasse.

Eine Umwandlung von einer Basisklasse in eine abgeleiteten Klasse ist nur möglich, wenn die Basisklasse von polymorphem Typ ist.

Eine Umwandlung in eine Basisklasse wird während der Compilierung durchgeführt. Eine Umwandlung einer Basisklasse in eine abgeleitete Klasse oder eine Umwandlung quer durch die Hierarchie erfolgt dagegen zur Laufzeit.

Wenn die Umwandlung durchgeführt werden kann, so wandelt der Ausdruck dynamic_cast< T > (ptr) den Zeiger ptr in den gewünschten Typ um. Falls die Umwandlung eines Zeigertyps nicht möglich ist, hat der zurückgegebene Zeiger den Wert 0. Falls die Umwandlung eines Referenztyps nicht möglich ist, so wird die Exception Bad_cast ausgelöst.

Anmerkung: Für die Nutzung von dynamic_cast müssen Laufzeitinformationen (RTTI) verfügbar gemacht werden.

Siehe auch

Codebeispiele