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
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
Hi!
Als Ergänzung zu mi~we's Antwort:
Die reinen Aufzählungstypen sind IMHO nur schlecht für direkte Eingaben zu nutzen. Das liegt schon daran, wie du selbst beschreiben hast, das man sie nicht direkt eingeben kann und man stattdessen einen Bytewert nutzen müsste, der erst über eine Typenwandlung mit einer Konstante des Aufzählungstyps verglichen werden kann (ich weiß jetzt nicht, wie streng C++ da ist, eine Typenwandlung könnte durchaus automatisch stattfinden).
Wenn die Aufzählungstypen verwendest, dann bewegst du dich auf der Grundlagenebene, quasi im ganz einfachen Bereich. Wenn du jetzt quasi eine Ebene höher wechselt und dich mit einer Programm-Oberfläche befasst (GUI), die dann in C++ mit "Leben" gefüllt werden (die GUI wird ja mehr oder weniger spachenunabhängig mit der Maus zusammengeklickt), dann ändert sich auch die Herangehensweise bei der Eingabe von fest vorgegebenen Werten.
Statt Aufzählungstypen wird man dann eine ENUM-Klasse finden, die im Prinzip das Prinzip der Aufzählungstypen weiterführt und die direkte Verwendung in der Oberfläche zulässt. Unabhängig, wie sich das bei deinem C++-Compiler nun nennt, wird man eine ENUM-Klasse nutzen können um z.B. Wochentage und Monatsnamen anzulegen und diese dann in Pulldown-Selektionsfeldern an der Oberfläche nutzen zu können. Ich hoffe dieser "Vorrausgriff" ist jetzt nicht zu "schnell" und du verstehst, was ich hier beschreibe (oder versuche zu beschreiben...).
OK,zurück zur "Basisebene". Da sind Aufzählungstypen einfach nur eine Erleichterung um numerische Konstanten für Aufzählungen lesbarer zu gestalten. Richtig nutzen lassen die sich aber nur intern im Programm. Bei Eingaben oder Ausgaben muss man immer eine Typwandlung in Bytes oder Integer durchführen. Dabei muss die Ein, oder Ausgabe aber eindeutig erfolgen.
Soll bedeuten ein Feld, dass entweder einen Tag oder einen Monat als Eingabe annimmt, ist nicht möglich: man braucht ein Feld für die Eingabe das Tages und ein weiteres Feld für den Monat (genauso würde man das dann bei einer GUI mit den ENUM-Feldern machen).
Bis dann
Andreas