Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

Mehrere Aufzählungstypen

Sovebämse / 6 Antworten / Flachansicht Nickles

Ich bin gerade dabei mir C++ anzueignen. Ich lese das Buch C++ in 21 Tagen.

Dort werden Aufzählungstypen kurz angesprochen. Es geht ja darum, dass man eigene Typen erstellen kann, womit dann Variablen definiert werden können.
Als Beispiel werden die Wochentage aufgeführt. Unter anderem kann man dann die Wochentage als Wort z.B. in if-Bedingungen verwenden. So kann ich also die Zahl 1 eingeben, welche dann z.B. dem Dienstag entspricht. Mit if (x = Dienstag) kann dann die Eingabe verglichen werden.

Nun meine Frage: Ich seh den Sinn darin nicht so ganz. Wenn ich nämlich mehrere verschiedene Aufzählungstypen erstelle, werden die jeweiligen Werte ja wieder ab 0 nummeriert.

Bsp.: Ich definiere den Typ Wochentag und den Typ Monat. Mache ich nun eine Abfrage und tippe die Zahl 0 ein, dann kann damit ja der Januar oder auch der Montag gemeint sein. Ein if-Vergleich würde dann bei beiden Möglichkeiten zutreffen, wäre somit also sinnlos.

Kann mir da jemand helfen, ob ich ev. einen Denkfehler mache bzw. ob man diese Aufzählungstypen einfach nicht so benutzt? Trotzdem bleibt mir schleierhaft, was ich dann mit den integer-Werten anfangen kann, wenn sie sich nicht mehr eindeutig zuordnen lassen.

Gruss und Dank
Thomas

bei Antwort benachrichtigen
higgl Sovebämse „Mehrere Aufzählungstypen“
Optionen
Ich definiere den Typ Wochentag und den Typ Monat. Mache ich nun eine Abfrage und tippe die Zahl 0 ein, dann kann damit ja der Januar oder auch der Montag gemeint sein. Ein if-Vergleich würde dann bei beiden Möglichkeiten zutreffen, wäre somit also sinnlos.

Ja ne, das hängt davon ab, mit welchem Typ du deine enum-Werte vergleichst. Verwendest du einen Integer in der Abfrage, hast du recht. (Sinnlos ist das btw überhaupt nicht, sondern oft sehr nützlich).

z.B.

typedef enum Wochentag {...};
typedef enum Monat {...};

int i;
i = someFunction();
if (i == Montag) ... // ok

if (i == Februar)... // ok


Um Typsicherheit zu bewahren:


Wochentag i;
i = someFunction();
if (i == Montag) ... // passt

if (i == Februar) ... // Compiler-Fehler
Never argue with an idiot. They drag you down to their level and then beat you with experience.
bei Antwort benachrichtigen