Diskussion:C++-Programmierung: Aufzählungen

Letzter Kommentar: vor 17 Jahren von Prog in Abschnitt Zuweisung int an enum

Zuweisung int an enum

Bearbeiten

Geht nicht so ohne weiteres, sondern erfordert expliziten Cast. Siehe ISO 14882, 7.2.8-9. Allerdings erzeugen viele Compiler nur eine Warnung oder erlauben es tatsächlich (im Sinne der Kompaitibilität mit C).

Habe deshalb das längere Codebeispiel auskommentiert. Eigentlich schade, vielleicht möchte jemand ein Kapitel über Bit-Operatoren schreiben? --Bernina 15:09, 24. Sep 2006 (CEST)

Ich setze dieses Beispiel vorerst hier ein:

Diese Variablen sind jedoch nicht typsicher, das heißt eine Anweisung wie die folgende würde vom Compiler nicht zurückgewiesen werden:

tag = 100;

Diese fehlende Typsicherheit ermöglicht es aber, mehrere Werte aus der Menge aufzunehmen. Würde man die Aufzählung wie folgt definieren,

enum Wochentage
{
  Montag = 1,
  Dienstag = 2,
  Mittwoch = 4,
  Donnerstag = 8,
  Freitag = 16,
  Samstag = 32,
  Sonntag = 64
};

könnte man mit

tag = Montag | Dienstag | Mittwoch | Donnerstag | Freitag;

der Variable alle Arbeitstage zuweisen. Dies ist möglich, da die einzelnen Werte Oder-verknüpft werden und somit, da bei der Aufzählungs-Deklaration nur Zweier-Potenzen verwendet wurden, immer eindeutige Kombinationen entstehen.

Montag     00000001 = 1
Dienstag   00000010 = 2
Mittwoch   00000100 = 4
Donnerstag 00001000 = 8
Freitag    00010000 = 16
------------------------
tag        00011111 = 31

Um abzufragen, ob in einer Variabler ein bestimmter dieser Werte enthalten ist, kann man folgenden Code verwenden:

bool montagIstEnthalten = ((tag & Wochentage::Montag) != 0)

Dies Und-verknüpft die tag-Variable mit dem gesuchten Tag

tag      00011111
Montag   00000001
-----------------
Ergebnis 00000001

Da dieses Ergebnis ungleich 0 ist, ist der gesuchte Tag enthalten.


Darin sind nahezu alle Aussagen falsch, aber vieleicht wird es später doch noch mal zur Verbesserung benötigt. --Prog 20:41, 30. Jun. 2007 (CEST)Beantworten

Zurück zur Seite „C++-Programmierung: Aufzählungen“.