Enumeration eller Enumerated type (enumeration) er en brugerdefineret datatype, der kan tildeles nogle begrænsede værdier. Disse værdier er defineret af programmøren på tidspunktet for deklarationen af den opregnede type.
Behov for Enum Class over Enum Type:
Nedenfor er nogle af grundene til, hvad der er begrænsningerne for Enum Type, og hvorfor vi har brug for Enum Class for at dække dem.
1.Enum er en samling af navngivne heltalskonstanter, hvilket betyder, at hvert element er tildelt efter heltalsværdi. 2.Det er erklæret med enum søgeord.
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;> }> |
>
>
parse streng til intProduktion
The roll no of avinash=68>
To optællinger kan ikke dele de samme navne:
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;> }> |
omdøb linux-mappe
>
>
Kompilationsfejl:
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; ^> Ingen variabel kan have et navn, som allerede er i en eller anden opregning:
CPP
#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;> }> |
>
>
Kompilationsfejl:
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 er ikke typesikker :
CPP
powershell admin
#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;> }> |
forekomst af
>
>
Advarsel:
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 har introduceret enum-klasser (også kaldet omfangsrige opregninger ), der laver opregninger begge dele stærkt skrevet og stærkt omfang . Klasseenum tillader ikke implicit konvertering til int og sammenligner heller ikke tællere fra forskellige tællinger.
For at definere enum klasse bruger vi klasse nøgleord efter enum nøgleord.
Syntaks:
// Declaration enum class EnumName{ Value1, Value2, ... ValueN}; // Initialisation EnumName ObjectName = EnumName::Value;> Eksempel:
// Declaration enum class Color{ Red, Green, Blue}; // Initialisation Color col = Color::Red;> Nedenfor er en implementering til at vise Enum Class
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;> }> |
>
>Produktion
alfabetet nummereret
It's not Red Good people 1>
Optegnede typer, der erklæret enum-klassen, har også mere kontrol over deres underliggende type; det kan være en hvilken som helst integral datatype, såsom char, short eller unsigned int, som i det væsentlige tjener til at bestemme størrelsen af typen.
Dette er specificeret af et kolon og underliggende type efter den opregnede type:
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:'< |
>
>Produktion
size of enum rainbow variable: 4 size of enum class eyecolor variable:1>
Reference: https://en.cppreference.com/w/cpp/language/enum