Einleitung
Ganzzahl-Literale
Gleitkomma-Literale
Zeichen- und String-Literale
Benannte Konstanten
Eine Konstante ist ein Datum, das sich nach seiner Initialisierung im aktuellen Gültigkeitsbereich nicht mehr verändern lässt. Ein einfaches Beispiel hierfür ist z.B. die Zahl Pi. Wie allgemein bekannt, entspricht Pi etwa dem Wert 3.1416. Anstatt nun bei jeder Verwendung von Pi den Zahlenwert 3.1416 zu schreiben, kann dafür auch ein Name vergeben werden, z.B. PI. Dieser Name wird dann anstelle des Zahlenwertes an den entsprechenden Stellen im Programm eingesetzt, an denen Pi verwendet wird. Wird nun während des Programmtests z.B. festgestellt, dass die Angabe von Pi zu ungenau ist, so müssen nun nicht mehr im gesamten Programm alle Pi-Werte verändert werden, sondern es wird lediglich die einmal definierte Konstante PI angepasst.
C++ kennt unter anderem folgende Arten von Konstanten, die wir uns in dieser Lektion ansehen werden:
Generell können aber von jedem beliebigen Datentyp Konstanten gebildet werden.
Außer nach der Konstantenart werden Konstanten noch nach unbenannten und benannten Konstanten unterschieden.
Der Begriff Literal ist im Prinzip nur ein anderes Wort für eine zahlenmäßige Konstante. In der Praxis werden direkte Zahlenangaben wie z.B. die Zahl 5 oder auch 3.14 als Literale bezeichnet, während der Begriff Konstante für benannte Konstanten verwendet wird.
Ganzzahl-Literale besitzen standardmäßig den kleinsten Datentyp, in dem ihr Wert repräsentiert werden kann. Dabei wird folgende Reihenfolge durchlaufen: int, long und unsigned long. Eine Ausnahme von dieser Reihenfolge bilden Ganzzahl-Literale die in oktaler bzw. hexadezimaler Schreibweise angegeben werden. Hier lautet die Reihenfolge: int, unsigned int, long und unsigned long. Literale in oktaler Schreibweise erhalten den Präfix 0 und Literale in hexadezimaler Schreibweise den Präfix 0x bzw. 0X.
Um einem Ganzzahl-Literal explizit einen bestimmten Datentyp zuzuweisen, wird die Zahlenangabe mit einem Suffix erweitert. Bei diesen Erweiterungen wird die Groß-/Kleinschreibung ausnahmsweise ignoriert. Die Tabelle unten enthält eine Übersicht über die verschiedenen Erweiterungen so wie einige Beispiele dazu:
| Literal ohne Suffix | 3 | -5 | +4 |
| Oktal-Literal, Präfix 0 | 03 | 012 | 0665 |
| Hex-Literal, Präfix 0x | 0x40 | 0XFF00 | -0xFF |
| unsigned Literal, Suffix U | 10U | 0xFF00u | 012u |
| long Literal, Suffix L | -10L | 0xFF00L | 012l |
| unsigned long Literal, Suffix UL | 10UL | 0xFFul | 012ul |
|
|
Gleitkomma-Literale bestehen aus Ziffern und einem Dezimalpunkt. Optional kann ein Gleitkomma-Literal noch einen Exponenten enthalten. Standardmäßig sind Gleitkomma-Literale vom Datentyp double.
Um einem Gleitkomma-Literal einen von double abweichenden Datentyp zuzuweisen, wird das Literal mit einem Suffix laut nachfolgender Tabelle erweitert. Auch hier spielt die Groß-/Kleinschreibung bei der Erweiterung keine Rolle.
| double Literal, ohne Suffix | -1.0 | 1. | +3.32 | -3.1E+4 |
| float Literal, Suffix F | -1.0f | 1.F | +3.32f | -3.1E+4F |
| long double Literal, Suffix L | -1.0L | 1.L | +3.32L | -3.1e+4L |
Zeichen-Literale sind einzelne Buchstaben oder auch Escape-Sequenzen, die in Hochkomma eingeschlossen werden. Sie besitzen den Datentyp char. Um ein Zeichen-Literal als wide-character Literal (Datentyp wchar_t) zu kennzeichnen, wird das Literal mit dem Präfix L erweitert.
String-Literale werden in Anführungszeichen eingeschlossen und die einzelnen Zeichen innerhalb des String-Literals sind vom Datentyp char. Um ein String-Literal mit Zeichen vom Typ wide-character (Datentyp wchar_t)zu definieren, wird das String-Literal mit dem Präfix L versehen (siehe erstes String-Literal in nachfolgender Tabelle).
| Zeichen-Literal | 'a' | ASCII-Zeichen a |
| '\n' | Zeilenvorschub (Escape-Sequenz) | |
| L'A' | wide-character A | |
| String-Literal | L"wide-character" | wide-character String |
| "char String" | char String |
String-Literale weisen noch drei Besonderheiten auf:
Felder und Speicherklassen werden später noch behandelt.
Hintereinander stehende String-Literale werden stets zusammenfasst. Somit ist die nachfolgende Ausgabe korrekt, da die drei String-Literale zu einem Literal zusammengefasst werden. Das Einzige worauf Sie dabei achten müssen ist, dass Sie keine char und wchar_t String-Literale nebeneinander stellen dürfen.
|
cout << "Diese ist ein String-Literal" // Ein String-Literal über mehrere Zeilen "obwohl es über mehrere" "Zeilen geht!\n"; |
Benannte Konstanten werden prinzipiell wie Variablen definiert, d.h. sie haben einen Datentyp und einen Namen (Konstantenname). Zusätzlich erfolgt jedoch vor dem Datentyp die Angabe des Schlüsselwortes const. Und da Konstanten (ihrem Sinn nach) während des Programmlaufs ihren Wert nicht ändern können, müssen Sie bei ihrer Definition initialisiert werden.
| Datentyp | Konstantenname | Initialwert |
| const int | NOOFLINES | = 24; |
| const char | LINEFEED | = '\n'; |
| const float | PI | = 3.1416f; |
| const short | NOTTHIS | ; |
Beachten Sie die letzte Definition in obiger Tabelle. Diese Definition erzeugt einen Übersetzungsfehler, da die Konstante nicht initialisiert wird.
Benannte Konstanten sind standardmäßig modulglobal, d.h. sie gelten nur in der Quellcode-Datei, in der sie definiert sind. Benötigen Sie eine benannte Konstante in mehreren Modulen (Quellcode-Dateien), so legen Sie die Konstante am besten in einer eigenen Header-Datei (.h Datei) ab, die sie dann in den entsprechenden Modulen mit #include "xx.h"; einbinden. Im Beispiel unten wird die Konstante PI in der Header-Datei myinc.h definiert. Diese Datei wird dann sowohl im Modul main.cpp wie auch im Modul mod1.cpp eingebunden. Dadurch ist in beiden Modulen die Konstante PI bekannt.
|
const float PI = 3.1416f; |
#include <iostream> #include "myinc.h" using namespace std; int main () { cout << "Pi hat den Wert " << PI << endl; } |
#include <iostream> #include "myinc.h" using namespace std; void PrintIt () { cout << "Pi hat den Wert " << PI << endl; } |
Damit Konstanten von Variablen unterschieden werden können, werden Konstantennamen innerhalb des Kurses stets in Großbuchstaben geschrieben. Dies ist aber keine Vorschrift!