logo

Enum-klassen in C++ en hun voordeel ten opzichte van Enum DataType

Opsommingen of opgesomd type (opsomming) is een door de gebruiker gedefinieerd gegevenstype waaraan een aantal beperkte waarden kunnen worden toegewezen. Deze waarden worden door de programmeur gedefinieerd op het moment dat het opgesomde type wordt gedeclareerd.

Noodzaak van Enum-klasse boven Enum-type:
Hieronder staan ​​enkele redenen waarom Enum Type de beperkingen heeft en waarom we Enum Class nodig hebben om deze te dekken.



1.Enum is een verzameling benoemde gehele constante, wat betekent dat elk element wordt toegewezen op basis van een geheel getal. 2.Het wordt gedeclareerd met het trefwoord enum.

C++








#include> using> namespace> std;> enum> roll_no {> >satya = 70,> >aakanskah = 73,> >sanket = 31,> >aniket = 05,> >avinash = 68,> >shreya = 47,> >nikita = 69,> };> int> main()> {> >enum> roll_no obj;> >obj = avinash;> >cout <<>'The roll no of avinash='> << obj;> }>

>

>

javascript voor vervolgkeuzelijst
Uitvoer

The roll no of avinash=68>

Twee opsommingen kunnen niet dezelfde namen delen:

CPP




#include> using> namespace> std;> int> main()> {> >// Defining enum1 Gender> >enum> Gender { Male,> >Female };> >// Defining enum2 Gender2 with same values> >// This will throw error> >enum> Gender2 { Male,> >Female };> >// Creating Gender type variable> >Gender gender = Male;> >Gender2 gender2 = Female;> >cout << gender << endl> ><< gender2;> >return> 0;> }>

>

>

Compilatiefout:

prog.cpp:13:20: error: redeclaration of 'Male' enum Gender2 { Male, ^ prog.cpp:8:19: note: previous declaration 'main()::Gender Male' enum Gender { Male, ^ prog.cpp:14:20: error: redeclaration of 'Female' Female }; ^ prog.cpp:9:19: note: previous declaration 'main()::Gender Female' Female }; ^ prog.cpp:18:23: error: cannot convert 'main()::Gender' to 'main()::Gender2' in initialization Gender2 gender2 = Female; ^>

Geen enkele variabele kan een naam hebben die al in een bepaalde opsomming voorkomt:

CPP

zure eigenschappen




#include> using> namespace> std;> int> main()> {> >// Defining enum1 Gender> >enum> Gender { Male,> >Female };> >// Creating Gender type variable> >Gender gender = Male;> >// creating a variable Male> >// this will throw error> >int> Male = 10;> >cout << gender << endl;> >return> 0;> }>

>

pseudocode java

>

Compilatiefout:

prog.cpp: In function 'int main()': prog.cpp:16:9: error: 'int Male' redeclared as different kind of symbol int Male = 10; ^ prog.cpp:8:19: note: previous declaration 'main()::Gender Male' enum Gender { Male, ^>

Enums zijn dat niet typeveilig :

CPP




#include> using> namespace> std;> int> main()> {> >// Defining enum1 Gender> >enum> Gender { Male,> >Female };> >// Defining enum2 Color> >enum> Color { Red,> >Green };> >// Creating Gender type variable> >Gender gender = Male;> >Color color = Red;> >// Upon comparing gender and color> >// it will return true as both have value 0> >// which should not be the case actually> >if> (gender == color)> >cout <<>'Equal'>;> >return> 0;> }>

een Android-app vergrendelen
>

>

Waarschuwing:

prog.cpp: In function 'int main()': prog.cpp:23:19: warning: comparison between 'enum main()::Gender' and 'enum main()::Color' [-Wenum-compare] if (gender == color) ^>

Enum-klasse

C++11 heeft enum-klassen geïntroduceerd (ook wel uitgebreide opsommingen ), dat maakt opsommingen beide sterk getypeerd en sterk van opzet . Class enum staat geen impliciete conversie naar int toe, en vergelijkt ook geen tellers van verschillende opsommingen.
Om de enum-klasse te definiëren, gebruiken we class-trefwoord na enum-trefwoord.
Syntaxis:

// Declaration enum class EnumName{ Value1, Value2, ... ValueN}; // Initialisation EnumName ObjectName = EnumName::Value;>

Voorbeeld:

// Declaration enum class Color{ Red, Green, Blue}; // Initialisation Color col = Color::Red;>

Hieronder vindt u een implementatie om Enum Class weer te geven

CPP




// C++ program to demonstrate working> // of Enum Classes> #include> using> namespace> std;> int> main()> {> >enum> class> Color { Red,> >Green,> >Blue };> >enum> class> Color2 { Red,> >Black,> >White };> >enum> class> People { Good,> >Bad };> >// An enum value can now be used> >// to create variables> >int> Green = 10;> >// Instantiating the Enum Class> >Color x = Color::Green;> >// Comparison now is completely type-safe> >if> (x == Color::Red)> >cout <<>'It's Red '>;> >else> >cout <<>'It's not Red '>;> >People p = People::Good;> >if> (p == People::Bad)> >cout <<>'Bad people '>;> >else> >cout <<>'Good people '>;> >// gives an error> >// if(x == p)> >// cout<<'red is equal to good';> >// won't work as there is no> >// implicit conversion to int> >// cout<< x;> >cout <<>int>(x);> >return> 0;> }>

>

>

Uitvoer

It's not Red Good people 1>

Opgesomde typen die door de enum-klasse zijn verklaard, hebben ook meer controle over hun onderliggende type; het kan elk integraal gegevenstype zijn, zoals char, short of unsigned int, wat in wezen dient om de grootte van het type te bepalen.

Dit wordt gespecificeerd door een dubbele punt en een onderliggend type dat het opgesomde type volgt:

eg: enum class eyecolor : char {char,green,blue}; Here eyecolor is a distinct type with the same size as a char (1 byte).>

C++




#include> using> namespace> std;> enum> rainbow{> >violet,> >indigo,> >blue,> >green,yellow,orange,red> }colors;> enum> class> eyecolor:>char>{> >blue,green,brown> }eye;> int> main() {> >cout<<>'size of enum rainbow variable: '><<>sizeof>(colors)< cout<<'size of enum class eyecolor variable:'<

converteer tekenreeks naar int java

>

>

Uitvoer

size of enum rainbow variable: 4 size of enum class eyecolor variable:1>

Referentie: https://en.cppreference.com/w/cpp/lingual/enum