Umwandlung

Die Programmiersprache C++ setzt voraus, dass, wenn eine Klasse von einer Basisklasse abgeleitet ist, die virtuelle Funktionen enthält, ein Zeiger auf diesen Basisklassentyp verwendet werden kann, um Implementierungen der virtuellen Funktionen, die sich im abgeleiteten Klasseobjekt befinden, aufzurufen. Eine Klasse, die virtuelle Funktionen enthält, wird manchmal als "eine polymorphe Klasse" bezeichnet.

Da eine abgeleitete Klasse die Definitionen aller Basisklassen enthält, von der sie abgeleitet ist, kann ein Zeiger oben in der Klassenhierarchie in jede dieser Basisklassen umgewandelt werden. Bei einem Zeiger auf eine Basisklasse, kann es sicherer sein, den Zeiger die Hierarchie herunter umzuwandeln. Es ist sicher, wenn das Objekt, auf das gezeigt wird, tatsächlich einen Typ aufweist, der aus der Basisklasse abgeleitet ist. In diesem Fall wird das tatsächliche Objekt als "vollständiges Objekt" bezeichnet. Der Zeiger auf die Basisklasse wird so gesagt, dass er auf ein "Unterobjekt" des vollständigen Objekts verweist. Betrachten Sie z. B. die Klassenhierarchie, die in der folgenden Abbildung gezeigt wird.

Diagram of a class hierarchy where C derives from B, which derives from A.
Klassenhierarchie

Ein Objekt vom Typ C könnte visualisiert werden, wie in der folgenden Abbildung zu sehen ist.

Diagram of Class C with subobjects B and A.
Klasse C mit Unterobjekten B und A

Bei einer Instanz der Klasse C, gibt es die Unterobjekte B und A. Die Instanz von C, einschließlich der Unterobjekte A und B, ist das "vollständige Objekt".

Mit Laufzeit-Typeninformation können Sie prüfen, ob ein Zeiger tatsächlich auf ein vollständiges Objekt zeigt und auch sicher umgewandelt werden kann, um auf ein anderes Objekt in seiner Hierarchie zu zeigen. Der dynamic_cast-Operator kann verwendet werden, um diese Arten von Umwandlungen zu erstellen. Außerdem wird die Laufzeitüberprüfung ausgeführt, die erforderlich ist, um den Vorgang sicher zu gestalten.

Für die Konvertierung von nichtpolymorphen Typen können Sie den static_cast-Operator verwenden (in diesem Thema wird der Unterschied zwischen statischen und dynamischen Umwandlungskonvertierungen erläutert, und wenn dies für die Verwendung der einzelnen Typen geeignet ist).

Dieser Abschnitt enthält die folgenden Themen:

Siehe auch

Ausdrücke