Mittels Typkonvertierung kann der ursprüngliche Datentyp, z.B. einer Variable oder eines Zeigers, in einen anderen Datentyp konvertiert werden. Wir werden uns in diesem Kapitel ansehen, wie solche Typkonvertierungen explizit durchgeführt werden können und wie die automatische Typkonvertierung arbeitet.
C++ bietet folgende Typkonvertierungen:
const_cast<DTYP>(AUSDRUCK)
static_cast<DTYP>(AUSDRUCK)
dynamic_cast<DTYP>(AUSDRUCK)
reinterpret_cast<DTYP>(AUSDRUCK)
DTYP ist der neue Datentyp, in den AUSDRUCK konvertiert werden soll. Jede dieser Typkonvertierung wird für eine spezielle Konvertierung eingesetzt.
Die const_cast Konvertierung dient dazu, den const oder volatile Modifizierer von einem Datentyp zu entfernen oder ihn hinzuzufügen (volatile wird später noch erklärt).
Die static_cast Konvertierung wird eingesetzt, um zwischen Ganzzahl-Datentypen und Gleitkomma-Datentypen zu konvertieren oder einen void-Zeiger in einen beliebigen anderen Zeiger zu konvertieren.
Die reinterpret_cast Konvertierung wird zum einen für die Konvertierung zwischen verschiedenen Zeigertypen und zum anderen für die Konvertierung von Ganzzahlen in Zeiger und umgekehrt eingesetzt.
Die dynamic_cast Konvertierung wird später im Anschluss an die Behandlung von abgeleiteten Klassen beschrieben, da sie nur in diesem Zusammenhang von Bedeutung ist. Sie ist nur der Vollständigkeit wegen an dieser Stelle erwähnt.
Viele 'alltägliche' Typanpassungen kann der Compiler automatisch vornehmen, wenn dadurch keine Information verloren geht.
Werte vom Datentyp char, unsigned char, signed char, unsigned short und signed short können vom Compiler auf den Datentyp int erweitert werden, wenn dadurch der gesamte Wertebereich des Original-Datentyps abgedeckt wird. Ist dies nicht der Fall, so wird eine Anpassung auf einen unsigned int Datentyp versucht. Ebenfalls kann ein bool Wert noch in einen int Wert konvertiert werden, wobei für true gleich 1 und für false gleich 0 verwendet wird.
Ein Gleitkommawert kann in einen Ganzzahlwert konvertiert werden, wobei die Nachkommastellen einfach abgeschnitten werden.
Ein Zeiger eines beliebigen Datentyps kann immer in einen void-Zeiger (typloser Zeiger) konvertiert werden. Außerdem kann ein Zeiger auf eine abgeleitete Klasse stets in einen Zeiger auf die entsprechende Basisklasse konvertiert werden. Dieser Sachverhalt spielt später noch eine wichtige Rolle.
Copyright © cpp-tutor.de
Impressum &Datenschutz