C++
VeröffentlichtRevision 1

Variablen, Initialisierung und Zuweisung

Eine Variable gibt einem Objekt einen Namen. Ihr Datentyp bestimmt, welche Werte und Operationen möglich sind. int eignet sich für ganze Zahlen in einem begrenzten Bereich, double für viele Rechnungen mit Näherungswerten und std::string für Text.

Variablen, Initialisierung und Zuweisung#

Werte und Ausdrücke · Lektion 12 von 60

Voraussetzungen: cin. Lernziel: Du unterscheidest Anfangswert und spätere Änderung.

Eine Variable gibt einem Objekt einen Namen. Ihr Datentyp bestimmt, welche Werte und Operationen möglich sind. int eignet sich für ganze Zahlen in einem begrenzten Bereich, double für viele Rechnungen mit Näherungswerten und std::string für Text.

C++
1#include <iostream>2#include <string>3 4int main() {5    int punkte{10};6    double temperatur{21.5};7    std::string name{"Ada"};8    punkte = 12;9    std::cout << name << ": " << punkte << " Punkte, "10              << temperatur << " Grad\n";11}

int punkte{10}; ist eine Definition mit Initialisierung: Das Objekt entsteht mit 10. punkte = 12; ist eine spätere Zuweisung. Sie ersetzt den Wert des vorhandenen Objekts. = bedeutet hier nicht „ist gleich?“. Dafür verwendet C++ ==.

Warum geschweifte Klammern?#

Die Listeninitialisierung mit {...} verhindert viele unbeabsichtigte verengende Umwandlungen. int anzahl{3.7}; ist ein Fehler, weil der Nachkommateil verloren ginge. Möglicher Informationsverlust bei einer Umwandlung heißt Narrowing, also Verengung.

int anzahl{}; setzt die Zahl auf null. std::string text; erzeugt einen leeren String. Eine gewöhnliche lokale Variable wie int anzahl; hat dagegen keinen von dir festgelegten Anfangswert. In der C++17-Basis dieses Kurses darfst du einen solchen Wert nicht auslesen, bevor du ihn gültig gesetzt hast. Initialisiere deshalb konsequent.

Namen richtig wählen#

Ein Bezeichner ist ein Name im Programm. Er darf beispielsweise Buchstaben, Ziffern und Unterstriche enthalten, aber nicht mit einer Ziffer beginnen. Schlüsselwörter wie int sind nicht frei verwendbar. Vermeide Namen mit doppeltem Unterstrich und andere reservierte Namensformen. anzahlTickets oder anzahl_tickets sind geeignete eigene Namen.

Camel Case verbindet Wörter mit Binnen-Großbuchstaben, etwa anzahlTickets. Snake Case verwendet Unterstriche. Wähle eine Konvention und bleibe dabei. Aussagekraft ist wichtiger als die Entscheidung zwischen diesen Schreibweisen.

Häufige Fehler#

Zwei Definitionen desselben Namens im selben Block führen typischerweise zu redeclaration oder redefinition. was not declared in this scope bedeutet häufig, dass der Name vor seiner Definition oder außerhalb seines Gültigkeitsbereichs verwendet wird. Das ist der Teil des Quelltexts, in dem der Name sichtbar ist.

Definiere Variablen nahe an ihrer ersten Verwendung. Verständliche, einzeln initialisierte Namen sind meist besser als eine Sammelzeile int a, b, c;.

Übung#

Lege versuche mit 0 an und ändere den Wert danach auf 1.

Lösung

int versuche{0}; und danach versuche = 1;. Die zweite Zeile beginnt nicht erneut mit int, weil das vorhandene Objekt geändert wird.

Den Wert nach jeder Zeile verfolgen#

Eine Zuweisung berechnet zuerst die rechte Seite. Erst danach wird das Ergebnis links gespeichert. Das Gleichheitszeichen in einer Zuweisung ist deshalb keine mathematische Gleichung.

C++
1#include <iostream>2 3int main() {4    int punkte{10};5    int kopie{punkte};6    punkte = punkte + 5;7    std::cout << punkte << ' ' << kopie << '\n';8}

Nach dieser Zeile

punkte

kopie

int punkte{10};

10

noch nicht angelegt

int kopie{punkte};

10

10

punkte = punkte + 5;

15

10

Die Ausgabe ist 15 10. kopie ist eine eigene Zahl. Sie beobachtet punkte nicht und ändert sich später nicht automatisch mit.

Drei Schreibweisen, drei Fragen#

Code innerhalb von main

Bedeutung

int anzahl{};

Neue ganze Zahl mit dem Anfangswert 0

int anzahl{3};

Neue ganze Zahl mit dem Anfangswert 3

anzahl = 7;

Bereits vorhandenen Wert durch 7 ersetzen

anzahl == 7

Vergleichen; ergibt true oder false, ändert den Wert nicht

Leere {} bedeuten bei int einen wohldefinierten Anfangswert. Verlasse dich bei einer lokalen Definition wie int anzahl; dagegen nicht auf einen zufälligen Speicherinhalt. Initialisiere den Wert vor dem ersten Lesen.

Übung: Kopie oder Verbindung?#

Ergänze nach punkte = punkte + 5; die Anweisung kopie = punkte;. Was wird jetzt ausgegeben?

Lösung

Jetzt lautet die Ausgabe 15 15. Die zweite Zuweisung kopiert den aktuellen Wert. Auch danach bleiben es zwei unabhängige Zahlen; eine spätere Änderung von punkte verändert kopie weiterhin nicht.

Weiterlernen#

Zurück: Manipulatoren: Zahlen und Tabellen formatieren · Kursübersicht · Weiter: Datentypen, Wertebereiche und Genauigkeit

Mitwirkende 1

Menschen, deren Änderungen in dieser Seite veröffentlicht wurden.

Kommentare 0

Kommentare sind für diese Seite deaktiviert.