Hjem Personlig finansiering Sterkt Typed Enumerations i C ++ - dummies

Sterkt Typed Enumerations i C ++ - dummies

Video: Zeitgeist Addendum 2024

Video: Zeitgeist Addendum 2024
Anonim

Programmering handler om lesbarhet. Det er vanskelig (faktisk det er umulig) å skrive og vedlikeholde et program som du ikke kan lese. En del av å lese en kildekodeoppføring er å forstå hva tallene som brukes i programmet representerer. Den mest grunnleggende hjelpen som C ++ gir, er den allestedsnærværende #definen, som i følgende ofte omtalte eksempel:

#define PI 3. 141592653589793

Denne løsningen er greit for individuelle verdier, selv om det lider av at #define mekanismen er ikke (strengt tatt) en del av C / C ++ siden preprosessoren kjører før kompilatoren. Som svar på dette introduserte C ++ 2011 et konstant uttrykk konstruksjon:

constexpr lang dobbel PI = 3. 141592653589793;

Constexpr-nøkkelordet bringer konstanter inn i C ++-teltet. Denne PI har en ekte type, som andre C ++-variabler. C ++ kan generere feilmeldinger med PI som gir mye mer mening enn de som involverer 3. 14159.

Konstantuttrykk er bra for individuelle konstante verdier, men ofte representerer konstanter sett av ting i stedet for naturlige konstanter, som i følgende eksempel:

#define DC_OR_TERRITORY 0 #define ALABAMA 1 #define ALASKA 2 #define ARKANSAS 3 // … og så videre …

Formentlig blir disse konstantene brukt til å identifisere statene som kanskje brukes som en indeks i en rekke statobjekter eller som en verdi i en database et sted.

C ++ har lenge hatt en forbedret mekanisme for å definere disse typer konstanter - oppregningen:

enum STATE {DC_OR_TERRITORY, // blir 0 ALABAMA, // får 1 ALASKA, // får 2 ARKANSAS, // … og så videre …};

Enum-nøkkelordet introduserer en sekvens av konstanter kalt en "oppsummering". I dette tilfellet bærer tallet navnet STATE. Hvert element i denne oppstillingen er tilordnet en verdi som starter ved 0 og øker sekvensielt med 1, slik at DC_OR_TERRITORY er definert som 0, ALABAMA er definert som 1, og så videre. Du kan overstyre denne inkrementelle sekvenseringen ved å bruke en tilordnet setning som følger:

enum STATE {DC, TERRITORY = 0, ALABAMA, ALASKA, // … og så videre …};

Denne versjonen av STATE definerer et element DC, som er gitt verdien 0. Den definerer deretter et nytt element TERRITORY, som også tildeles verdien 0. ALABAMA plukker opp med 1, som før.

I praksis kan programmereren bruke tall for å skrive ganske lesbar kode som følgende:

double taxRate (STATS s) {return tax RatesByState [s];}

Det eneste problemet med denne tilnærmingen er at denne oppsummeringen Oppretter ikke en ny type (som du kanskje tror).Faktisk, ifølge standarden er STATE bare et annet navn for int - og konstantene ALABAMA, ALASKA, og så videre, er alle type const int.

Gcc-kompilatoren gir faktisk en enum deklarert på denne måten litt mer autoritet enn bare å kalle det en annen form for int. Du kan faktisk overbelaste funksjoner basert på en enum type:

void fn (STATE s); void fn (int n); fn (Alaska); // påberoper fn (STATE)

2011-standarden lar programmereren lage en helt ny type ved hjelp av enum-søkeordet. Siden skaperne av den nye standarden ikke ville bryte eksisterende kode, krever standarden tillegg av et ekstra søkeord for å definere en opptellingstype, som i følgende eksempel:

enum klasse STATE {DC, TERRITORY = 0, ALABAMA, ALASKA, // … og så videre …};

En opptellingsklasse er nå en fullskala type som enhver annen brukerdefinert klasse. Følgende er ikke engang lovlig lenger av to grunner:

int s = ALASKA;

Først er den konstante ALASKA bare definert innenfor STATE namespace. Dermed er konstantens navn STATE:: ALASKA. For det andre er typen ikke int men STATE. Du kan ikke tildele en verdi av typen STATE til en int.

STATE s = STATE:: ALASKA;

Programmøren kan omstille en STAT til en int, men hun må gjøre det eksplisitt. Forenkler konverteringer ikke kuttet med opptellingsklasser:

int n = (int) STAT:: ALASKA;

Denne nye enumtypen kan også baseres på en av de andre talltypene i tillegg til bare int:

enum klasse STATE: char {DC, // … resten av erklæringen er den samme
Sterkt Typed Enumerations i C ++ - dummies

Redaktørens valg

Vanlige medikamenteffekter for legeassistenteksamen - dummies

Vanlige medikamenteffekter for legeassistenteksamen - dummies

Bli kjent med vanlige bivirkninger for legeassistenteksamen (PANCE). Den gjennomsnittlige personen over 60 år tar omtrent ni reseptbelagte medisiner og ser minst fire forskjellige helsepersonell. Potensialet for noen til å oppleve bivirkningene av disse medisinene er enorm, og det er potensialet for signifikante legemiddelinteraksjoner. ...

Epidemiologiske studier dekket av legeassistenteksamen - dummies

Epidemiologiske studier dekket av legeassistenteksamen - dummies

For legeassistenteksamen (PANCE) du bør være oppmerksom på forskjellene mellom typer epidemiologiske studier. Det første trinnet er å gjenkjenne om studiet er en retrospektiv studie eller en prospektiv studie: Retrospektiv: En retrospektiv studie betyr at du ser på fortiden for å finne ut hva som skjedde. For eksempel, en ...

Forhold som påvirker pleura dekket på legeassistenteksamen - dummies

Forhold som påvirker pleura dekket på legeassistenteksamen - dummies

Du kan se Spørsmål om legeassistenteksamen om forhold som påvirker pleura. Du må vurdere evaluering og behandling av pleural effusions, pneumothorax og pleurisy. Væske rundt lungene: Pleural effusjon Normalt er pleura et tomt rom; en pleural effusjon er ganske enkelt væske som opptar den plassen. Pleural ...

Redaktørens valg

Slik setter du automatiske varsler på LinkedIn - dummies

Slik setter du automatiske varsler på LinkedIn - dummies

Sikkert, du kan gjøre alt fotverket ved å gå til LinkedIn hjemmesiden og ser deg rundt for å se hvilke meldinger eller endringer som har skjedd. Den sanne kraften til å holde kontakten, har imidlertid LinkedIn, kontakter deg automatisk med den informasjonen du trenger for å holde deg informert. Klikk på Administrer-koblingen ved siden av Personvern og innstillinger ...

Tips for å administrere dine LinkedIn Post-interaksjoner - dummies

Tips for å administrere dine LinkedIn Post-interaksjoner - dummies

Når du klikker Publiser på LinkedIn, kan du tenke at jobb er ferdig, men det er bare begynt. Etter hvert som flere og flere leser innlegget ditt, kan de samhandle med innlegget og med deg som forfatter. Her er noen ting å huske på etter at du har publisert et innlegg: Overvåk statistikken. Når du ...

Forstå LinkedIn Pulse - dummies

Forstå LinkedIn Pulse - dummies

Har du sjekket ut LinkedIn Pulse ennå? Tenk deg om du leser en avis som bare viste deg artikler som har betydning for deg. (For det hele, for mange av dere, tenk på de dagene du kanskje har lest en avis.) Tilpassede nyheter er mulige, og på LinkedIn kalles det LinkedIn Pulse. Alt du trenger å gjøre for å ...

Redaktørens valg

Hva Dragon NaturallySpeaking kan gjøre for deg - dummies

Hva Dragon NaturallySpeaking kan gjøre for deg - dummies

Noe om å diktere til en datamaskin vekker alle slags urealistiske forventninger hos mennesker. Hvis du forventer at du skal servere deg frokost på sengen, har du lykke til. Denne artikkelen ble ikke skrevet ved å si "Computer, skriv en bok om NaturallySpeaking. "Forfatteren måtte diktere det ord for ord, akkurat som hun ville hatt ...

Når Start ikke starter i NaturallySpeaking - dummies

Når Start ikke starter i NaturallySpeaking - dummies

Når du gir kommandoen "Start" til Dragon NaturallySpeaking, du sier "Start America Online" eller "Start Microsoft Works" eller "Start Quicken", og programmet skal åpnes. Men hva hvis det ikke gjør det? Hva er greia? Start-kommandoen starter et program som er installert på maskinen din, og har enten et snarveisikon på ...

Når NaturallySpeaking Menykommandoer ikke fungerer - dummies

Når NaturallySpeaking Menykommandoer ikke fungerer - dummies

Når du gir en kommando til NaturallySpeaking, for eksempel "Klikk" og ingenting skjer, det sannsynlige problemet er at menyen Bruk menyer som er kompatible med skjermlesere, ikke er merket av. For å sjekke det: Velg Verktøy → Valg i vinduet NaturallySpeaking. Det er ikke noe poeng å fortelle deg hvordan du får tilgang til dette med stemmen, for det er akkurat ...