"C++" Sprøgsmål til enumerator "enum"

Tags:    c++

<< < 12 > >>
Hej, jeg sidder her og læser og øver mig med denne bog Beginning C++ Through Game Programming.

Og jeg er på side 93 og er kommet til at jeg skal lave et lille bogstav jagt spil i kommando prompt og det er også fint nok men jeg er stødt på noget jeg ikke helt forstår.

I bogen skriver Michael Dawson "forfatteren af bogen" dette her tip.

Trick: You can list a final enumerator in an enumeration as a convenient way to store the number of elements. Here's an example.
Fold kodeboks ind/udKode 

In the previous code, NUM_DIFF_LEVELS is 3, the exact number of difficulty levels in the enumeration. As a result, the second line of code display the message, "There are 3 difficulty levels".

Det jeg ikke forstår er hvordan den sidste i enum har nummeret på hvor mange der er i den enum, jeg kan ikke se hvordan den finder ud af der er 3.



Indlæg senest redigeret d. 14.02.2010 18:02 af Bruger #8715
Det er fordi ligesom med arrays så er den første enumerator 0, den anden 1, den tredje 2 osv. (medmindre du specificerer et nummer). Den sidste vil så altid være det antal af muligheder (undtagen sig selv). Så hvis du har 3 sværhedsgrader: let, mellem og svært, vil det være henholdsvis "nummer" 0, 1 og 2. Hvis du efter dette har en enumerator for antallet af sværhedsgrader vil den have værdien 3, hvilket også er antallet af sværhedsgrader.

Lads os nu sige du har 10 sværhedsgrader. De vil så være 0-9 (forudsat du ikke specificerer et nummer). Hvis du så tilføjer en for antallet vil den få værdien 10, hvilket igen er antallet af elementer.

Hvis N er antallet af elementer.
Hvis S er antallet af elementer + elementet der fortæller hvor mange elementer der er dvs. (N+1)

Lads os sige N=10. Hver af de originale elementer har "værdien" N-1 (fordi der startes ved 0), så her 0-9. Så lægger du en en værdi ind der indeholder antallet af elementer. Dvs. S=11. Dens værdi bliver så S-1=10 som er lig med N.



Indlæg senest redigeret d. 14.02.2010 18:49 af Bruger #14645
Søren, jeg tak for dit nuværende svar men jeg forstår ikke helt endnu.

Jeg forstår det med numrende som jeg også kender fra arrays men det jeg ikke forstår er, er den sidste i enum ALTID et nummer på hvor mange elementer der er ?



Jeg kan godt forstå at du ikke forstår det, men prøv at se om du kan gennemskue følgende:

Fold kodeboks ind/udKode 


Det betyder faktisk det samme som
Fold kodeboks ind/udKode 


Du har tre niveauer, EASY, MEDIUM og HARD. NUM_DIFF_LEVELS har bare fået tildelt nummeret 3 i din enum. Men dette passer jo meget godt med at du har tre niveauer.



ah sådan!

Ja nu kan jeg se det.


Her sad jeg og læste kapitlet med det trick en tusinde gange og fattede bjælke, jeg troede jo den på en eller anden måde tog og fandt ud af hvor mange andre der var osv osv. men jeg gjorde det jo kun mere svært for mig selv :)

Mange tak for hjælpen til jer begge :)



Indlæg senest redigeret d. 14.02.2010 20:29 af Bruger #8715
Men det skal lige siges at det ikke ALTID er sådan. F.eks. hvis du selv specificerer et nummer:
Fold kodeboks ind/udKode 

Så vil NUM_DIFF_LEVELS vist nok være lig med 201. Hvis du ikke skriver noget tal starter den med 0, 1, 2 osv..



Ja det rigtigt, rigtig smart man også selv kan give dem numre :)



Det er ret farligt at stole på at sidste element har antallet af elementer, for sådan behøver det ikke at være...heller ikke selvom man ikke selv har været inde og pille. Compileren skal bare give elementerne forskellige værdier.



Hvad så hvis man angiver første element med værdien 0 så giver den vel resten i rækkefølge ?



Det er ret farligt at stole på at sidste element har antallet af elementer, for sådan behøver det ikke at være...heller ikke selvom man ikke selv har været inde og pille. Compileren skal bare give elementerne forskellige værdier.


C og C++ standarden garanterer at det virker, compileren kan ikke bare vælge tilfældige værdier. Hvis man ikke angiver andet skal den første i enumlisten have værdien 0, den næste 1 osv.

Derfor kan man også bruge værdierne i loops, fra mandag til og med soendag, f.eks.



Det er ret farligt at stole på at sidste element har antallet af elementer, for sådan behøver det ikke at være...heller ikke selvom man ikke selv har været inde og pille. Compileren skal bare give elementerne forskellige værdier.


C og C++ standarden garanterer at det virker, compileren kan ikke bare vælge tilfældige værdier. Hvis man ikke angiver andet skal den første i enumlisten have værdien 0, den næste 1 osv.

Derfor kan man også bruge værdierne i loops, fra mandag til og med soendag, f.eks.


Jeg har arbejdet med en ARM compiler som startede med 1.



<< < 12 > >>
t