![]() |
![]() |
C++ - Variable |
G.Eichelsdörfer - Staatliche Technikerschule Weilburg |
Im Folgenden werden Variablen und Objekte nur wenig unterschieden, weil eine tiefer gehende Unterscheidung an dieser Stelle nicht hilfreich ist und den Leser nur überfordern würde.
Jedes Programm, mit Ausnahme unserer ersten beiden, verarbeitet Daten.
Zu diesem Zweck müssen diese Daten vom Programm eingelesen werden.
Einlesen bedeutet zugleich, dass das Programm die Daten im Arbeitsspeicher ablegt
um sie dort für die weitere Verarbeitung griffbereit zu haben.
Die Datenwerte selbst sind vor dem Einlesen unbekannt.
Sie unterscheiden sich zumeist von Eingabe zu Eingabe.
Man sagt: Sie variieren.
Auch Zwischenresultate und Hilfswerte werden im Arbeitsspeicher zwischengespeichert.
Für den einfachen Zugriff auf eingelesene und zwischengespeicherte Daten brauchen wir in einer höheren Programmiersprache wie C++ nicht unmittelbar auf den Arbeitsspeicher zuzugreifen. C++ stellt dafür die Konstruktion von Variablen zur Verfügung. Diese heißen so, weil deren Inhalt variiert (s.o.).
In einer höheren Programmiersprache werden Variablen zur Speicherung von Daten gebraucht.
In der letzten Programmieraufgabe wurde der Vorname des Programmbenutzers eingelesen. Dieser Vorname muss vor seiner weiteren Verarbeitung im Arbeitsspeicher abgelegt werden. Hierzu ist ein string-Objekt besonders geeignet. Ein solches Objekt ist eine etwas komplexere Variable, ein sog. Container der Standardbibliothek. Solche Container sind Behälter für eingelesene, zu verarbeitende oder auszugebende Daten - zumeist größeren Umfangs.
Einfache Variable sind passiv, ähnlich einem Lagerregal. Objekte sind aktiv, sie unterstützen uns beim Programmieren. Containerobjekte stellen nicht nur passive Lagerregale zur Verfügung, sie bringen auch gleich einen Lagerverwalter mit.
In der einfachen Form repräsentiert eine Variable einen kleinen Teil des Arbeitsspeichers. In der komplexen Form verwaltet ein Container (wie string) einen Teil des Arbeitsspeichers, ähnlich einem Lagerverwalter.
Bevor eine Variable oder ein Objekt verwendet werden kann, muss es angelegt bzw.
definiert werden. Zu diesem Zweck muss man einen Datentyp oder eine Objektklasse
auswählen. Wenn Sie etwas transportieren wollen, müssen Sie dafür auch einen
geeigneten Behältertyp wählen. Eine Variable oder ein Objekt erhält bei seiner
Definition einen Namen (Identifier), über den der Compiler die Variable oder das Objekt
identifizieren kann.
Beispiel: std::string Vorname;
In C++ dürfen Namen für Variable, Objekte, Funktionen ... ausschließlich aus Buchstaben des amerikanischen Alphabets, Ziffern und dem Unterstrich bestehen. Ein Name darf nicht mit einer Ziffer beginnen und kein Leerzeichen (Lücke) beinhalten.
Sobald eine Variable definiert wurde, kann man sie durch Nennung ihres Namens verwenden. Über den Namen einer Variablen wird auf deren Inhalt (Wert) zugegriffen. Beim Zugriff wird der Wert einer Variablen entweder gelesen oder durch Schreiben verändert. Die Verwendungsmöglichkeiten einer Variablen und besonders eines Objektes sind vielfältig. Die zunächst wichtigsten sind:
Einlesen per Einlesestream
Dabei wird ein Wert per Einleseoperator >>
aus dem Stream, beispielsweise cin
,
geholt und in der Variablen oder dem Container abgelegt (Schreiben).
Beispiel: cin >> Vorname;
Ausgeben per Ausgabestream
Hier wird der Inhalt der Variablen oder des Containers per Ausgabeoperator <<
dem Ausgabestream, beispielsweise cout
, zugeführt.
Beispiel: cout << Vorname;
Wertzuweisung
Die Variable oder der Container erhält dabei einen neuen Inhalt, der bisherige
Inhalt geht durch Überschreiben verloren.
Der Zuweisungsoperator ist das einfache Gleichheitszeichen =.
Anders als in der Mathematik ist dieser Operator nicht symmetrisch.
Er weist immer von rechts nach links zu. Die linke Seite erhält den Wert,
welcher von der rechten Seite geliefert wird.
Beispiel: Vorname = "Alfonso";
Das string-Objekt Vorname
erhält den Wert "Alfonso".
"Alfonso" = Vorname;
ergibt keinen Sinn,
weil einer Konstanten ("Alfonso") kein Wert zugewiesen werden kann.
Im Rahmen der obigen Verwendungen können Umwandlungen erforderlich werden, die der Operator übernimmt oder der Compiler selbstständig beim Übersetzen einbaut.