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++

Datentypwandlung bei gemischten Typen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Um mit Zahlenvariablen unterschiedlichsten Typs rechnen zu können, ohne dass die Gefahr von Datenverlust (z.B. Verlust der Nachkommastellen) besteht, müssen diese zuerst gecastet werden.

Transkript

Nun haben wir ja schon unterschiedliche Datentypen kennengelernt: Integer, Double auch Character. Wenn man die Inhalte der Variablen untereinander zuweisen will, dann geht das nicht immer automatisch. Ich würde Ihnen mal zeigen, was es da so für Varianten gibt. Also machen wir mal hier eine Deklaration d1. Das soll unser Double sein und int nehme ich i1, so. Jetzt muss ich natürlich da irgendeinen Wert reinschreiben. Da nehme ich hier mal das und i1 möchte ich jetzt zuweisen, und zwar den Inhalt von d1 nach i1. Das Ganze geben wir dann aus und schauen mal, ob das in der Form überhaupt funktioniert. So, das ist die Idee. Nun kann in einem Integer natürlich nicht ein Double-Wert gespeichert werden, also irgendwas muss dabei verloren gehen. Und ich starte es einfach mal und wir schauen, was passiert. Da kommt 123 raus. Das ist jetzt in der Tat richtig, hat funktioniert und gibt keine Fehlermeldungen oder Warnungen. Das hängt immer davon ab, wie der Compiler auch eingestellt ist. Wenn man auf Nummer sicher gehen will, dann muss man hier eine Typenunwandlung aktivieren, und zwar sieht die so aus: Static cast heißt der Befehl und hier sage ich jetzt: bitte im Compiler, das hätte ich gerne so und dann macht er das hier auch und diesmal haben wir allerdings einen Fehler eingebaut versehentlich. Da muss man hier mal schauen, das kann immer wieder mal passieren. Hier ist ein Syntaxfehler und zwar braucht man hier, wenn ich das zuweisen will, eine Klammer um die Variable oder den Wert, der umgewandelt werden muss. So, starten wir das Ganze nochmal und jetzt funktioniert es. 123 kommt raus. Also wie gesagt: ohne diesen hängt es davon ab, wie der Compiler gerade eingestellt ist. Ob da ein Fehler kommt, das muss bei verschiedenen Compilern nicht immer genau gleich ablaufen und selbst unter einer Umgebung, aber so ist man auf der sicheren Seite. Es ist zumindest eine Warnung da, wenn man das so macht. Ich kann das vorher nochmal dazuschreiben. Wir schauen mal an, was eigentlich hier unser Microsoft-Compiler bei der Geschichte tut. Sie sehen ich weiß das auch gar nicht auswendig, weil ich im Zweifelsfall, da ist auch die Warnung da unten zu sehen, das immer explizit mache. Hier haben wir eine Warnung. Schauen wir mal, da haben wir sie auch schon. Warnung: Konvertierung von Double in Int, möglicher Datenverlust. Nun das ist genau das, was hier auch passiert. Hier die Nachkommastellen gehen verloren. Es gibt natürlich auch noch schlimmere Varianten, wenn ich ein short in ein long umwandle. Zum Beispiel kann es sein, dass der Wert dann völlig falsch ist, weil ich gar nicht genügend Stellen habe. Das kann beim Double auf Integer natürlich auch passieren. Wie gesagt, hier sagt man dem Compiler: ich will das auf jeden Fall so haben. Was alternativ auch geht, das ist noch die Schreibweise vom früheren C und auch C++ kann das immer noch. Also starte ich das Ganze mal. Das ist natürlich jetzt eher Schmarrn gerade, kommt aber nichts anderes raus, so macht es natürlich mehr Sinn. Der Compiler meldet hier aber keinen Fehler. Also, Typenumwandlung geht so natürlich auch. Der Hintergrund, warum man das nicht mehr nehmen sollte, es gibt noch andere Casts: const_cast, es gibt noch dynamic_cast und reinterpret_cast für unterschiedlichen Datentypen und Anwendungsfälle. Das hat man bisher unterschieden, es wäre damit nicht zu handlen und das ist außerdem wesentlicher eleganter was den Datentyp angeht mit der Schreibweise, aber ansonsten ist die Funktion im Wesentlichen die Gleiche. Es gibt noch ein schönes Beispiel, das können wir hier gerade mal anbauen. Ich mache mal Folgendes, ich möchte gerne mal das Umgekehrte jetzt am Schluß haben. Die Eins, i1 durch i2. So und jetzt machen wir mal hier vorne eine Zuweisung i1. Jetzt muss ich mir noch was Sinnvolles überlegen, damit das auch gleich einen Sinn macht, was ich Ihnen zeigen will. Naja, ich könnte hier im Prinzip mal etwas nehmen, was jetzt nicht aufgeht. Das ist schon mal an sich ganz gut. Genau, ist ja das egal, nehmen wir das einfach mal und hier oben muss ich natürlich die Variable i2 noch deklarieren. Und hier geben wir, lasse ich das Andere mal weg, den Wert d1 unmittelbar dann aus, also 100 durch 33 ist an sich ja kein Drama. Schauen wir mal, was dabei rauskommt. 3. Naja, nun, nun denn. Das ist ja vielleicht ganz gut, mache ich das mal so. Ich möchte jetzt hier gerne mal das etwas übersichtlicher haben. Im Prinzip funktioniert es ja auch. Nun das ist ja jetzt glaube ich etwas offensichtlicher. Also, 10 durch 3 gibt 3, na ja ungefähr, 3 mal 3 ist 9 und nicht 10 und eigentlich habe ich hier ein Double. Da muss ich jetzt in der Tat einen static Cast auf Double einbauen. So Klammer auf und Klammer zu nicht vergessen. Weil er macht nämlich sonst Folgendes, der Compiler schaut: hier ist ein Integer, da ist ein Integer, da mache ich die Division auch im Integer. Also ganzzahlig, wenn ich aber hier den unteren Wert auf Double caste, dann wird die gesamte Operation, also der größte Wertebereich, nachdem richtet sich das, der wird dann genommen und alles auf diesen Wertebereich expandiert. Die Zuweisung wird erst danach erledigt. Hier ist eigentlich auch ein Cast von Integer auf Double. Das würde dann auch nichts nutzen, wenn ich das in Klammern schreibe, dann wird das immer noch falsch in Einführungszeichen rechnen. Also muss man hier mal gucken, was jetzt passiert und jetzt kommt 3,333 raus. Und hier, wenn ich jetzt dieses Beispiel nehme, das war von vorher vielleicht ein bisschen unglücklich gewählt, aber auch das sollte natürlich nicht aufgehen. Das weiß man immer nicht so auswendig. Lasse ich es ruhig mal so als Beispiel stehen. Und jetzt haben Sie gesehen, wie man mit Typenumwandlung einmal hier was erzwingen kann, oder auch die Art und Weise, wie berechnet wird, verändern kann.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

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!