C++ Grundkurs

Dynamic-Cast-Operator

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Der Dynamic-Cast-Operator erlaubt es, den Typ einer Instanz innerhalb einer Ableitungshierarchie zur Laufzeit zu ändern.
03:56

Transkript

In dieser Lektion will ich ihnen den expliziten Cast dynamic_cast vorstellen. Dieser Cast ist ein besonderer Cast, weil er zur Laufzeit stattfindet, darum heißt er auch dynamic. Er dient dazu, Zeiger oder Referenzen in Klassentypen in andere Zeiger oder Referenzen in der gleichen Ableitungskette zu konvertieren. Das Besondere ist, er darf nur auf polymorphe Typen angewendet werden. Was sind polymorphe Typen? Das sind Typen, die mindestens eine virtuelle Methode haben, oder anders ausgedrückt: Typen, die zur Laufzeit erst bestimmt werden. Der dynamische Cast ermöglicht das Casten nach oben, nach unten und quer in der Ableitungshierarchie. Er kostet ein bisschen was, weil diese Typinformation erst zur Laufzeit eruiert wird, um herauszufinden, ob der Cast zulässig ist. Ist der Cast nicht zulässig, gibt es bei einem Zeiger einen sog. nullptr als Ergebnis zurück, bei einer Referenz eine sog. std::bad_cast-Ausnahme. Diese Dinge will ich Ihnen jetzt in der Anwendung zeigen. Hier habe ich meinen Account, diesmal extrem minimal. Das einzige, was der Account hat, ist einen virtuellen Destruktor, bei dem ich noch zum Compiler gesagt habe, sorge du für die Implementierung. Dadurch, dass ich hier einen virtuellen Konstruktor habe, ist diese ganze Ableitungshierarchie, die auf diesen Account hier aufsetzt, polymorph, so dass die Typen erst zur Laufzeit bestimmt werden. Ich kann also den dynamischen Cast anwenden. Jetzt schaue ich mir mit Ihnen diese Ableitungshierarchie ein bisschen genauer an. Ich habe einen Account, ich leite von dem Account zweimal public ab, einen speziellen Account, einen BankAccount und einen WireAccount. Den BankAccount und den WireAccount verwende ich nochmals, um den CheckingAccount abzuleiten, und einen sog. SavingAccount. Die Namen sind relativ egal. Das Entscheidende an dieser Struktur ist nur, dass sie ausreichend komplex ist, um Ihnen die Anwendungsfälle zu zeigen. Jetzt initialisiere ich alle Accounts mit einem nullptr. Ich habe einen Accout a, BankAccount b, WireAccount w und SavingAccount s. Dann habe ich hier einen CheckingAccount, und das ist der einzige Account, der tatsächlich jetzt default initialisiert ist. Alle anderen haben einen nullptr erhalten. Das ist meine Ausgangsbasis. Diesen CheckingAccount nehme ich hier und führe ein sog. hoch casten durch. D. h., ich nehme die Instanz c vom Typ CheckingAccount und caste sie hoch nach Account. Für diesen Cast hätte ich aber keinen dynamischen Cast benötigt. Den erlaubt der Compiler so und so, aus dem einfachen Grund, weil der CheckingAccount nur ein spezieller Account ist. Jetzt kommen die ein bisschen anspruchsvolleren Casts. Ich gehe hier noch einmal von meinem Account aus und mache einen Downcast. Ich caste sozusagen herunter zu BankAccount und das muss ich mit einem dynamischen Cast machen. Etwas Ähnliches mache ich hier. Ich nehme einen BankAccount und caste ihn in diesem Fall cross zum WireAccount. Das muss ich Ihnen bildlich zeigen. Also ich starte mit b. Ich caste eine Instanz vom Typ BankAccount hoch zu Account und wieder runter zum WireAccount, und dann bin ich hier gelandet, beim WireAccount. Das ist ein Crosscast. Der letzte Cast, was mache ich hier? Ich gehe von meinem Account aus und caste ihn im ersten Schritt zu einem BankAccount und im zweiten Schritt zu einem SavingAccount. Ich führe praktisch zwei Casts aus, von Account nach BankAccount und von BankAccount nach SavingAccount. In dieser Lektion habe ich Ihnen den dynamischen Cast gezeigt. Das ist ein Cast, der erst zur Laufzeit stattfindet, der von daher ein bisschen Rechenpower benötigt, da die Typinformation zur Laufzeit ausgewertet werden muss. Wenn der Cast fehlschlägt, bekommen Sie einen nullptr zurück im Falle eines Pointers oder eine std::bad_cast-Exception. Das Entscheidende ist, dass dieser Cast natürlich nur funktionieren kann, wenn Sie einen sog. polymorphen Typ haben. Ein polymorpher Typ ist ein Typ, der mindestens eine virtuelle Methode besitzt.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!