Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++ Grundkurs

Benutzerdefinierte Konvertierung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Ein Programmierer legt mit einer benutzerdefinierten Konvertierung das Ergebnis einer Typkonvertierung explizit fest.
03:54

Transkript

In dieser Lektion will ich Ihnen die benutzerdefinierte Typkonvertierung vorstellen. Eine benutzerdefinierte Typkonvertierung setzt voraus, dass Sie einen benutzerdefinierten Typ haben. Das ist in diesem Fall MyClass. MyClass hat zwei besondere Methoden, einen sog. Konvertierungskonstruktor MyClass(A) und einen Operator B. Der Konvertierungskonstruktor erlaubt, dass eine Instanz vom Typ A in eine Instanz vom Typ MyClass konvertiert werden kann. Der Operator B gewährleistet, dass eine Instanz vom Typ MyClass in eine Instanz von Typ B konvertiert werden kann. Es gibt noch eine Besonderheit. Hier in der Mitte, das muss natürlich immer der benutzerdefinierte Typ sein. Rechts A wie auch links B, das können beliebige Typen sein. Das können built-in Typen sein wie double. Das können aber auch Standard-Strings sein oder auch eigene Datentypen. Jetzt gibt es bei dieser Konvertierung noch eine Besonderheit. Diese kann implizit oder explizit sein. Implizit heißt, dass bei dieser Konvertierung von A nach MyClass oder von MyClass nach B eine sog. implizite Konvertierung stattfindet. Also eine Konvertierung, die der Compiler automatisch anstößt. Wenn es das nicht gibt, nennt man die Konvertierung explizit. Das können Sie dem Compiler vorschlagen durch das Schlüsselwort explizit. Jetzt zeige ich Ihnen die Punkte in der Anwendung. Hier habe ich eine Klasse Account, die mittlerweile wohl bekannt ist mit der privaten Variablen balance. Diese Klasse Account hat zwei besondere Methoden. Zum einen den sog. Konvertierungskonstruktor. Dieser Konstruktor nimmt eine Instanz vom Typ double an und liefert eine Instanz vom Typ Account zurück. Hier gibt es noch den Operator double, der agiert auf eine Instanz vom Typ Account und gibt ein double zurück, im Endeffekt die balance. Da gehe ich runter in die Mainfunktion, und hier sehen Sie, ich habe den Konvertierungskonstruktor nach explizit und implizit sortiert. Fangen wir hier an. Mit der runden, mit der geschweiften Klammer ist es jeweils eine explizite Typkonvertierung und mit dem Gleichheitszeichen hier, das ist eine implizite Typkonvertierung, weil hier der Compiler eine Typkonvertierung anwenden muss. Hier geht es weiter. Wenn ich einen Account habe, kann ich den jetzt zur balance machen, da bei dieser Anwendung - das Gleichheitszeichen - findet eine implizite Typkonvertierung statt. Hier eine explizite, weil ich sie direkt anfordere. Hier gibt es noch einmal eine implizite Typkonvertierung. Das Account wird implizit zu double. Der Wert des doubles, in diesem Fall 100, wird mit 50.5 addiert und heraus kommt 150.5 und das landet in dem Wert sun. Dass das hier oben alles syntaktisch richtig ist, zeige ich Ihnen, indem ich das Programm übersetze und Sie sehen, es passiert gar nichts. Gar nichts ist falsch. Der Compiler wirft keinen Fehler. Das Programm ist syntaktisch richtig. Jetzt modifiziere ich es ein bisschen und verwende einen modifizierten Account. Dazu kommentiere ich den ersten aus und den zweiten ein. Das speichere ich. Was ist das Besondere an diesem Account? Der hat einen expliziten Konvertierungskonstruktor und der hat den expliziten Operator double. Das bewirkt, dass diese Ausdrücke, die hier implizit sind, syntaktisch nicht mehr richtig sind. Das kann ich Ihnen zeigen, indem ich es übersetze und Sie sehen error conversation from double‘ to non-scalar type ‚Account‘ requested. D. h., hier findet eine implizierte Konvertierung statt in der Zeile 33. Das ist verboten, da ich gesagt habe, der Konstruktor muss explizit sein. Die entsprechende Fehlermeldung haben Sie hier. Sie haben die Fehlermeldung in den Zeilen 33, 34, 36 und 39. In dieser Lektion habe ich Ihnen die benutzerdefinierte Typkonvertierung vorgestellt und bin ich explizit auf den Punkt eingegangen, dass es einen Unterschied zwischen der impliziten und expliziten Typkonvertierung gibt.

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!