Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
24.05.2002, 23:05
King2500



an alle C++ler:

wer von euch verwendet den typ enum ??

--

Webmaster @ Half-Life Portal

zum Seitenanfang zum Seitenende Profil || Suche
001
24.05.2002, 23:15
Mazze



Ich manchmal

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
002
24.05.2002, 23:51
Kriz



Ich, damit definiere ich meistens Flags:

Quellcode:enum EStatusflag
{
    SF_UNDEF = 0x0000000,
    SF_MOEP = 0x0000001,
    SF_TRULLALLA = 0x00000002,
    SF_FIRLEFANZ = 0x00000004,
    SF_GEH_FOTT = 0x00000008,
    SF_GUUDE = 0x00000010
};

Nachteil ist, daß in C++ Operatoren überladen werden müssen, wenn man diese Flags nur gegenseitig behandelt mit &, | oder ^

Falls man nur int-Werte mit den Flags behandelt, dann braucht man das nicht, da enum-Werte als int gelten.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
003
25.05.2002, 00:53
Andy_



Hmm, ich kann mich noch dran erinnern, das Enum auch die defines() benutzt werden können, vielleicht irre ich mich, aber habe schon lange net mehr mein C++ aufgefrischt...

--

42 Es gibt keinen Sinn des Lebens.

zum Seitenanfang zum Seitenende Profil || Suche
004
25.05.2002, 01:36
Leviathan



was ist das überhaupt? ich hab das zwar schon in mindestens 3 büchern gelesen aber nie gerafft.
ist das nicht sowas ähnliches wie ein bitfeld? oder wie eine konstante?
von der deklaration her sieht es fast aus wie eine klasse / ein struct.
das einzige was ich dazu weiss ist dass es das auch schon in ansi-c gab.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
005
25.05.2002, 10:41
Another1



ein "Aufzählungstyp", der definiert letztendlich konstante werte (und zählt, solange kein wert zugewiesen wird, vorwärts)

enum ENUM1_OSO
{
MY_ENUM_A = 1,
MY_ENUM_B, // automatisch 2, da MY_ENUM_A + 1 = 2
MY_ENUM_C = 4, // soll 4 sein, nich 3, daher wieder ne zuweisung
[...]
};

die kannsu dann im code als integer konstanten benutzen
z.B.
ShowUserMessage("blabla",MY_ENUM_A);
und so weiter =)

vorwiegend dazu da um 'böse' #defines zu eleminieren, außerdem auch an sich schöner =)

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
006
25.05.2002, 11:00
mani



du kannst auch schreiben

Quellcode:enum
{
MY_ENUM_A = 1,
MY_ENUM_B, // automatisch 2, da MY_ENUM_A + 1 = 2
MY_ENUM_C = 4, // soll 4 sein, nich 3, daher wieder ne zuweisung
[...]
};

oder den enumnamen als rückgabetyp:

Quellcode:ENUM1_OSO GetLastShownMsg();

--

zum Seitenanfang zum Seitenende Profil || Suche
007
25.05.2002, 14:44
Mazze



Oder du kannst eine Variable erstellen:

Quellcode:
ENUM1_OSO Player;
...

if( Player == JUMP )
...

if( Player == DUCK )
...

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
008
26.05.2002, 03:01
Leviathan



danke, jetzt hab ich das verstanden.
bisher hab ich immer #define dafür genommen.
sind enums eigentlich typensicher? welchen typ haben die konstanten aus einem enum denn? ein großer nachteil von #define ist ja, dass es nicht typensicher ist, da es schon vor dem kompilieren ersetzt wird.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
009
26.05.2002, 13:31
Kriz



Levi, du mußt auch mal lesen, was wir so schreiben :D

Zitat:
Falls man nur int-Werte mit den Flags behandelt, dann braucht man das nicht, da enum-Werte als int gelten.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
010
26.05.2002, 18:24
static_caster



praktisch is noch, daß man alle möglichen operatoren für ein(e?) enum überladen kann.

--

zum Seitenanfang zum Seitenende Profil || Suche
011
26.05.2002, 22:37
Leviathan



@kriz: du hast ja so recht, aber um kurz vor 3 (forenuhr geht vor) is das gar nicht mehr so einfach.

und das operatoren-overloading mag zwar lustig sein, geht aber afaik nur in c++ (nicht in c), und was soll das bringen? ich kann mir da keinen fall vorstellen, wo das was bringen könnte, kennt ihr da fälle?

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
012
26.05.2002, 23:46
Kriz



Wie gesagt, wenn man nur enums gegenseitig behandeln will als Typ:
Quellcode:enum EFlag
{
    FLAG_ZERO = 0,
    FLAG_OK
};

Quellcode:class Test
{
    EFlag m_enumFlag;
...
};

In diesem Fall sind sämtliche Behandlungen mit den bitweisen Operatoren &, | und ^ nur mit vorherigen Operator-Überladungen möglich, da man zwar ENUM auf INT behandeln darf, aber nicht INT auf ENUM. Hier geht also nur ENUM und ENUM und das geht nur mit passend gemachten Operatoren.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
013
27.05.2002, 17:53
TheTinySteini



Hat in gewisser Weise den Vorteil, dass man eine integrierte, allerdings ziemlich dürftige, Range-Checking Funktionalität hat...

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche