Paras vastaus
Oletetaan, että haluat koko (E), jossa E on enum -tyyppi:
Se riippuu perustyypistä. Normaalisti se on int, mutta jos käytät enum class
, voit määrittää tämän C ++: ssa. Kummassakin tapauksessa sizeofin pitäisi antaa oikea arvo.
Ei ole vakio- tai sisäänrakennettua tapaa määrittää numeroiden lukumäärä C: ssä tai C ++. Jos olet kurinalainen ja sinulla ei ole aukkoja, voit käyttää jotain tällaista: jokaisen lukijan ja ensimmäisen lukuun ottamatta tulee olla edeltäjäänsä korkeampi:
enum Days { Monday, Tuesday, … Saturday, LAST };
Tässä päivien määrä on sama kuin LAST: n int-arvo, mutta tietysti sinun on varmistettava, että LAST on todellakin viimeinen. Kääntäjä ei voi pakottaa tätä.
Jos et aloita nollasta, mutta jostain syystä aloitat sanasta 7, voit laskea LAST – maanantai:
enum Days { Monday = 7, Tuesday, … Saturday, LAST };
int numDays = LAST - Monday; // still yields 7
Varmista myös, että Maanantai pysyy ensin .
Vastaus
Enum (lyhenne sanoista luettelo ) on tekniikka jonkinlaisen merkityksen lisäämiseksi numeroihin. Tietokoneet rajoittuvat vain lukumäärään, ja luetteloiden avulla teeskennellään, että nämä numerot kuvaavat laatua eikä määrää.
Yksi tunnetuimmista luetteloista on koodaus, jota käytämme tekstin tallentamiseen. Ajatuksena on antaa jokaiselle kirjaimellemme numero, paljon samalla tavalla kuin lapsille tarkoitettu kirja kirjoittaa numerokoodin. Käyttämämme koodi näyttää tältä:
A = 65, B = 66, C = 67, … Z = 90; a = 97, b = 98, c = 99, … z = 122.
Jos olet Windows-koneessa, kokeile tätä: Napsauta kohtaa, johon voit kirjoittaa tekstiä. Pidä ALT-näppäintä painettuna ja pidä sitä painettuna, kirjoita yksi näistä numeroista numeronäppäimistöön. Esimerkiksi [Paina ja pidä painettuna Alt] 65 [Vapauta Alt]. Kirjain A ilmestyy; tämä on todella vanha tapa kirjoittaa merkkejä suoraan niiden numeerinen koodi. Se on enimmäkseen hyödyllinen kirjoitettaessa kansainvälisiä merkkejä, kun sinulla ei ole oikeaa näppäimistöä: Çüéâäàåçê … ovat mitä saan Alt + 128, 129, 130, jne. Tämä on tapa paljastaa taustalla oleva merkkien luettelointi.
Ei ole mitään taikaa siinä, että valitsisimme numeron 65 tarkoittamaan A: ta; Ainoa asia, että olemme johdonmukaisia. Luku on siis tapa määrittää numeroita ei-numeerisille ideoille ja helpottaa koodin käyttöä.
Huomaa, se on hyödyllistä, että merkkien järjestys vastaa aakkosjärjestystä (ainakin englanniksi). Näin on helpompaa kirjoittaa merkkijonot, jotka lajittelevat asiat aakkosjärjestykseen, koska voit huijata ja käyttää numeerisen arvon vertailuja. Muilla kielillä se muuttuu hieman hankalammaksi, koska hahmoille osoitetut numeeriset arvot eivät aina vastaa aakkosjärjestystä.
Toisen esimerkin luettelosta oletetaan, että kirjoitamme ohjelman käsittelemään verkkoyhteyksillä. Verkkoyhteyksillä voi olla muutama erilainen tila; ne saattavat olla kuuntelevat , avoimet , suljettu tai -virhe -tilassa. Nämä ovat ominaisuuksia, ei määriä, ja että mihin enum on tarkoitettu:
enum ConnectionState {
NCON\_LISTEN,
NCON\_OPEN,
NCON\_CLOSED,
NCON\_ERROR
};
Mielestäni on yleensä parempi käytäntö upottaa enumsi luokan määritelmään. Tämän avulla voit ohittaa etuliitteet:
class Connection {
public:
enum State {
LISTEN, OPEN, CLOSED, ERROR
};
};
Tyyppi on Connection::State
ja arvot ovat Connection::LISTEN
, Connection::OPEN
jne. Mielestäni tämä on selkeämpää.
Esimerkki numeeristen arvojen ja enum-arvojen sekoittamisesta ei ole ” Ei ole järkeä; Kaikkien lueteltujen arvojen on aloitettava kirjaimella. Et yleensä voi käyttää numeroa siellä, missä lukua odotetaan; C ++ -kääntäjät käsittelevät muureja ja enumeja erityyppisinä. Ei ole kiellettyä, että merkityksellisiä numeroita liitetään enum-arvoihin (huomaa kuinka hyödyllinen se on aakkosjärjestyksessä), mutta se ei ole oletuskäytäntö.
Voitteko tulostaa tai syöttää enum? Varmasti voit , mutta koska se on mukautettu tyyppi, sinun on kirjoitettava siihen omat >> ja