Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

C++ Grundkurs

Aufzählungen

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Eine Aufzählung stellt in C++ eine Menge von Integer-Konstanten mit dazugehörigen Bezeichnern dar.
06:14

Transkript

In dieser Lektion stelle ich Ihnen den zusammengesetzten Typ Aufzählung vor, in Englisch auch Enumaration. Aufzählungen sind einfach sprechende Namen für Integer-Konstante. Hier definiere ich eine Enumeration Color mit den Aufzählungen oder Enumaratoren red, blue und green. Enumerations werden mit dem Schlüsselwort enum eingeleitet. Wenn man zusätzlich das Schlüsselwort class oder struct verwendet, besitzen die Enumerations einen eigenen Gültigkeitsbereich. Jetzt gehe ich erst auf die einfache Form, auf die Enumeration ohne eigenen Gültigkeitsbereich ein. Die klassische Form sozusagen. Bei der Enumeration ohne Gültigkeitsbereich kann der Name wie ein Typ verwendet werden. Ich habe hier eine Funktion getColor, will eine Farbe haben als Argument, und die Farbe kann jetzt natürlich vom Wert red, blue oder green sein. Eben wie ich Color definiert habe. Ich kann auch über die Werte iterieren. Ich kann von red nach green iterieren. red konvertiert hier implizit zu 0 und green zu 2. Enumarations ohne Gültigkeitsbereich haben einige Typprobleme. Der Typ der Aufzähler ist nicht definiert. Color kann zum Typ char, int oder einem anderen integralen Wert werden. Die einzige Zusicherung, die man hat, ist dass der Typ groß genug sein muss, um alle Werte dieser Enumeration aufzunehmen. Es lässt sich aber mit modernem C++ der Typ explizit angeben. enum SmallColor: char, damit sind red, blue und green vom Typ char. Das hat einen Vorteil. Man kann Enumerationen auf diese Art und Weise vorwärts deklarieren. Das ist ohne explizite Typangabe nicht möglich. Noch ein paar Punkte mehr zu Aufzählungen ohne Gültigkeitsbereich. Sie starten per Default beim Wert 0. Die Werte können auch explizit angegeben werden. Falls Sie im nächsten Enumerator keinen Wert angeben, wird der Wert des Vorgängers plus 1 genommen. Einer Variable eines Aufzählungstyps kann kein Integer-Wert zugewiesen zugewiesen werden. Jetzt kommt mein Ausrufezeichen. Enumerations oder Aufzählungen ohne Gültigkeitsbereich haben ein paar Probleme. Sie können anstelle eines int-Werts verwendet werden. Hier wird also konvertiert. Sie verschmutzen den globalen Namensraum. Wenn Sie die Enumeration Color anschauen, die ich hier definiert habe, verschmutzt das red, blue und green meinen globalen Namensbereich, weil die jetzt in dem globalen Namensbereich zur Verfügung stehen. Aus diesem Grund gibt es im modernen C++ Aufzähler oder Aufzählungen mit Gültigkeitsbereich. Auf die gehe ich jetzt ein. Für die gelten die gleichen Regeln, so dass der erste Enumerator mit 0 beginnt, jeder folgende einen Integer-Wert um 1 größer erhält und dass man auch die Integer-Werte explizit angeben kann. Auch für sie gelten ein paar besondere Dinge. Sie gelten als streng typisiert. Das geschieht dadurch, dass hier das Wort class oder struct hinzugefügt wird. Nun kann man auf die Enumeratoren nur noch qualifiziert über Doppelpunkte nach Gültigkeitsbereich zugreifen. Sie konvertieren nicht implizit zu int wie die Aufzählungen ohne Gültigkeitsbereich. Daher verschmutzen sie auch nicht den globalen Namensbereich. Der zugrundeliegende Typ ist per Default int. Sie können aber auch hier einen anderen Typ angeben. D. h. natürlich auch, da der Typ bekannt ist, können Sie per Default vorwärts deklariert werden. Nach der Theorie kommt jetzt die Praxis. Ich habe erst einmal eine klassische Enumeration enum Color, die haben Sie vorher schon gesehen mit den Werten red, blue, green. red hat jetzt natürlich den Wert 0, blau den Wert 1, green den Wert 2. Das Gleiche noch einmal, aber mit Gültigkeitsbereich, darum habe ich es Color1 genannt. red, blue, green. Die Werte sind die gleichen, 0, 1, 2. Hier in Color2, wo ich aber explizit sage, red, blue, green sollen vom Typ char sein - da gehe ich noch einmal darauf ein - hier weiß ich nicht, von welchem Typ red, blue und green sind. Hier bei Aufzählungen mit Gültigkeitsbereich - das ist der Punkt mit diesem class - weiß ich, dass sie per Default int sind. Ich kann sie aber auch spezifizieren, indem ich hier sage, ich will aber "char" haben. Hier unten verwende ich Color2. Color2 ist eine Enumeration mit Gültigkeitsbereich. Sie sehen, ich kann auf die Elemente nur qualifiziert zugreifen. Qualifiziert meine ich, weil ich hier Color :: sagen muss. Ich muss also diesen Namen verwenden und mit :: ihn qualifizieren, so kann ich ihn in einem set straight bent verwenden. Jetzt gehe ich noch ein bisschen aufs Hauptprogramm ein. red ist ein Enumerator aus einem Enum ohne Gültigkeitsbereich, darum kann ich ihn einfach hier als red verwenden. Sie sehen, was kommt raus, red ist 0. Wenn man das Gleiche mit einer Aufzählung mit Gültigkeitsbereich machen würde, würde ich hier einen Fehler bekommen, darum mache ich es natürlich nicht. Das geht nicht. Hier das Beispiel von vorher zeige ich noch einmal in der Anwendung. Ich stelle alle Werte von Color dar. Die Werte gehen von red nach blue nach green. Ich zeige es Ihnen noch einmal, red, blue, green. Dementsprechend ergibt red, blue, green, 0, 1, 2. Nun gehe ich noch ein bisschen auf die Größe der Enumeratoren ein. sizeof(Color1), das ist, wie ich gesagt habe, per Default int. Das ist eine Aufzählung mit Gültigkeitsbereich. Bei mir ist int 4 Byte groß. Ich habe eine 64-Bit-Architektur. sizof(Color2) ist eben nur 1 Byte groß, eben weil bei mir ein char 1 Byte groß ist. Das muss ich relativieren. 1 char ist überall 1 Byte groß. Hier noch ein kleines Beispiel. Hier habe ich Color2 Aufzähler. Von dem erkläre ich eine Variable color2Red, die ich mit dem Wert color2Red initialisiere. Das ist natürlich eine Aufzählung mit Gültigkeitsbereich. Diesen Wert color2Red verwende ich dann, um die Funktion useMe aufzurufen und useMe gibt dann color2Red aus. Das macht es aus dem einfachen Grund, weil color2Red auf diesen Casefall hier anspielt. In dieser Lektion habe ich Ihnen Aufzählungen oder auf Englisch Enumerations vorgestellt. Der große Unterschied ist, dass Aufzählungen ohne Gültigkeitsbereich den globalen Namensraum verschmutzen, da sie implizit nach int konvertieren. Die mit Gültigkeitsbereich tun es nicht. Ein weiterer großer Unterschied ist, dass Aufzählungen ohne Gültigkeitsbereich keinen definierten Enumeratorentyp zugrunde liegen haben. Die mit Gültigkeitsbereich schon und der Defaulttyp ist eben int.

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!