Huis Persoonlijke financiën Sterk getypte opsommingen in C ++ - dummies

Sterk getypte opsommingen in C ++ - dummies

Video: Exploring JavaScript and the Web Audio API by Sam Green and Hugh Zabriskie 2024

Video: Exploring JavaScript and the Web Audio API by Sam Green and Hugh Zabriskie 2024
Anonim

Programmeren heeft alles te maken met de leesbaarheid. Het is moeilijk (eigenlijk is het onmogelijk) om een ​​programma te schrijven en te onderhouden dat je niet kunt lezen. Een deel van het lezen van een broncode-lijst is een goed begrip van wat de getallen in het programma voorstellen. Het meest basale hulpmiddel dat C ++ biedt, is de alomtegenwoordige #define, zoals in het volgende oft-aangehaalde voorbeeld:

#define PI 3. 141592653589793

Deze oplossing is geschikt voor individuele waarden, hoewel het lijdt onder het feit dat de #define-mechanisme is (strikt genomen) geen onderdeel van C / C ++ omdat de preprocessor vóór de compiler wordt uitgevoerd. Als reactie hierop heeft C ++ 2011 een constante expressie -construct toegevoegd:

constexpr lang dubbel PI = 3. 141592653589793;

Het constexpr-trefwoord brengt constanten in de C ++ -tent. Deze PI heeft een echt type, net als andere C ++ -variabelen. C ++ kan foutberichten genereren met PI die veel logischer zijn dan die met 3. 14159.

Constante uitdrukkingen zijn prima voor individuele constante waarden, maar vaak vertegenwoordigen constanten sets van dingen in plaats van natuurlijke constanten, zoals in het volgende voorbeeld:

#define DC_OR_TERRITORY 0 #define ALABAMA 1 #define ALASKA 2 #define ARKANSAS 3 // … enzovoort …

Vermoedelijk worden deze constanten gebruikt om de toestanden te identificeren, misschien gebruikt als een index in een array van state-objecten of als een waarde in een database ergens.

C ++ heeft al lang een verbeterd mechanisme voor het definiëren van dit soort constanten - de opsomming:

enum STATE {DC_OR_TERRITORY, // krijgt 0 ALABAMA, // krijgt 1 ALASKA, // krijgt 2 ARKANSAS, // … en spoedig…};

Het trefwoord enum introduceert een reeks constanten die een "opsomming" wordt genoemd. In dit geval heeft de opsomming de naam STATE. Elk element van deze opsomming krijgt een waarde die begint bij 0 en achter elkaar wordt verhoogd met 1, dus DC_OR_TERRITORY is gedefinieerd als 0, ALABAMA is gedefinieerd als 1, enzovoort. U kunt deze incrementele volgorde wijzigen door een toewijzingsinstructie als volgt te gebruiken:

enum STATE {DC, TERRITORY = 0, ALABAMA, ALASKA, // … enzovoort …};

Deze versie van STATE definieert een element DC, dat de waarde 0 krijgt. Het definieert dan een nieuw element TERRITORY, waaraan ook de waarde 0 is toegewezen. ALABAMA pakt met 1, net als voorheen.

In de praktijk kan de programmeur opsommingen gebruiken om behoorlijk leesbare code te schrijven, zoals de volgende:

dubbele taxrate (STATE s) {return taxRatesByState [s];}

Het enige probleem met deze aanpak is dat deze opsomming maakt geen nieuw type aan (zoals je misschien denkt).In feite is STATE, volgens de standaard, gewoon een andere naam voor int - en de constanten ALABAMA, ALASKA, enzovoort, zijn allemaal van type const int.

De gcc-compiler geeft inderdaad een enum dat op deze manier een beetje meer autoriteit wordt verklaard dan gewoon een andere vorm van int. U kunt functies overbelasten op basis van een enum-type:

void fn (STATE s); void fn (int n); fn (Alaska); // verwijst naar fn (STATE)

Met de 2011-standaard kan de programmeur een volledig nieuw type maken met behulp van het trefwoord Enum. Omdat de makers van de nieuwe standaard bestaande code niet wilden verbreken, vereist de standaard de toevoeging van een extra sleutelwoord om een ​​opsommingstype te definiëren, zoals in het volgende voorbeeld:

enum klasse STATE {DC, TERRITORY = 0, ALABAMA, ALASKA, // … enzovoort …};

Een opsommingsklasse is nu een volledig schaaltype zoals elke andere door de gebruiker gedefinieerde klasse. Het volgende is om twee redenen niet eens meer legaal:

int s = ALASKA;

Ten eerste wordt de constante ALASKA alleen gedefinieerd binnen de STATE-naamruimte. Dus de naam van de constante is STATE:: ALASKA. Ten tweede is het type niet int maar STATE. U kunt een waarde van het type STATE niet toewijzen aan een int.

STATE s = STATE:: ALASKA;

De programmeur kan een STATE omzetten in een int, maar ze moet dit expliciet doen - impliciete conversies knippen het niet met opsommingsklassen:

int n = (int) STATE:: ALASKA;

Dit nieuwe type type kan ook worden gebaseerd op een van de andere typen getallen naast alleen int:

enumklasse STATE: char {DC, // … de rest van de verklaring is hetzelfde
Sterk getypte opsommingen in C ++ - dummies

Bewerkers keuze

Een Oracle-omgeving instellen - dummies

Een Oracle-omgeving instellen - dummies

Als u een typische PL / SQL-omgeving wilt instellen, hebt u de volgende componenten: Databaseserver: dit is een computer (of een reeks computers) die de Oracle-database uitvoert. Oracle werkt in veel populaire computeromgevingen. De meest gebruikte met Oracle zijn UNIX, Linux of een versie van Microsoft Windows. PL / SQL wordt meestal uitgevoerd ...

SQL-rijwaarden en -waarden - dummies

SQL-rijwaarden en -waarden - dummies

De waarden die worden bewaard in de cellen die de snijpunten van de SQL-database vormen De rijen en kolommen van de tabel zijn de grondstoffen waaruit u zinvolle relaties en trends kunt afleiden. Rijwaarden De meest zichtbare waarden in een database zijn tabelrijwaarden. Dit zijn de waarden die elke rij van een databasetabel ...

SQL eerste, tweede en derde normale vormen - dummies

SQL eerste, tweede en derde normale vormen - dummies

Er zijn drie bronnen van wijzigingsanomalieën in SQL Deze worden gedefinieerd als eerste, tweede en derde normale vormen (1NF, 2NF, 3NF). Deze normale vormen fungeren als remedies voor het wijzigen van anomalieën. Eerste normale vorm Om in de eerste normale vorm (1NF) te zijn, moet een tabel de volgende eigenschappen hebben: De tabel is tweedimensionaal met rijen en ...

Bewerkers keuze

Een kijkje nemen in het syndroom van Empty-Nest - dummies

Een kijkje nemen in het syndroom van Empty-Nest - dummies

Een veel voorkomende misvatting is dat wanneer de kinderen van een stel vertrekken thuis, zullen pappa en mama het syndroom van empty-nest ontwikkelen. Ja, ze hebben misschien een leeg nest, maar voor sommige paren bloeit hun liefdesleven in deze periode van hun leven. De slachtoffers van het syndroom zijn de paren waarvan de relatie uit elkaar valt als zij de enige ...

STD's: wat u moet weten over herpes - dummies

STD's: wat u moet weten over herpes - dummies

Herpes, veroorzaakt door het herpes simplex-virus (HSV) ), is een ongeneeslijke SOA. Herpes heeft eigenlijk twee vormen: herpes simplex-type 1 (HSV-1) en herpes simplex-type 2 (HSV-2). HSV-1 wordt meestal geassocieerd met koortsblaasjes en koortsblaren boven de taille. "Ongeveer 80 procent van de Amerikaanse volwassenen heeft orale herpes. Ongeveer 25 procent van ...

Tiener Geslacht: hoe te weten Hoe ver te gaan - dummies

Tiener Geslacht: hoe te weten Hoe ver te gaan - dummies

Een van de grootste vragen voor tieners is niet "Zou ik seks moeten hebben? "Maar" Hoe ver moet ik gaan? "Terwijl het eigen comfortniveau en dat van de partner de topprioriteit zou moeten zijn in deze beslissing, spelen andere factoren een rol, vooral als tieners dat amorfe concept van" het derde honk overwegen. "" Derde basis "...

Bewerkers keuze

Tien voorwaarden American Football Announcers Gebruik - dummies

Tien voorwaarden American Football Announcers Gebruik - dummies

Een van de moeilijkste en meest intimiderende onderdelen over het volgen van een Amerikaans voetbalwedstrijd is dat de presentatoren soms een vreemde taal lijken te spreken die alleen bekend is bij echte voetballiefhebbers. Maar als je een aantal belangrijke termen onthoudt, ben je ver voor op het spel. Hier zijn enkele voetbaltermen die je misschien hoort, ...

Het begin van een voetbalspel: The Kickoff - dummies

Het begin van een voetbalspel: The Kickoff - dummies

Voor Amerikaanse voetbalfans, de openingsaftrap is een opwindende start voor elke game. Ze zien de tweezijdige sensatie van het ene team dat probeert het andere te blokkeren en helpt de herhaler om door en voorbij 11 snelladers van het trapende team te rennen. (Wel, maak die tien spelers.De kicker staat meestal rond de 50-yard-lijn, ...

Uw voetbalcoachtoelen afstemmen op een leeftijdsgroep - dummies

Uw voetbalcoachtoelen afstemmen op een leeftijdsgroep - dummies

Elk kind in uw team is anders zoveel manieren. Sommigen zijn begaafde hardlopers, anderen kunnen duizelingwekkende vangsten maken en wat moeite om simpelweg de basistechnieken van het spel te vatten. Ongeacht de sterke en zwakke punten van de kinderen, die overal op de kaart staan, hebben jongeren algemene kenmerken die worden beïnvloed ...