Uppräkningar eller uppräknad typ (uppräkning) är en användardefinierad datatyp som kan tilldelas vissa begränsade värden. Dessa värden definieras av programmeraren vid tidpunkten för att deklarera den uppräknade typen.
Behov av Enum Class över Enum Type:
Nedan finns några av anledningarna till vad som är begränsningarna för Enum Type och varför vi behöver Enum Class för att täcka dem.
1.Enum är en samling namngivna heltalskonstanter betyder att varje element är tilldelat av ett heltalsvärde. 2.Det deklareras med enum nyckelord.
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;> }> |
>
>
sessionen har löpt utProduktion
The roll no of avinash=68>
Två uppräkningar kan inte dela samma namn:
CPP
konvertera ett datum till en sträng
#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;> }> |
>
>
Kompileringsfel:
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 ha ett namn som redan finns i någon uppräkning:
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;> }> |
>
>
Kompileringsfel:
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, ^> Uppräkningar är det inte typsäker :
javafx på eclipse
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;> }> |
>
>
Varning:
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 Klass
C++11 har introducerat enum-klasser (även kallade avgränsade uppräkningar ), som gör uppräkningar båda starkt typat och starkt omfångat . Klassenum tillåter inte implicit konvertering till int och jämför inte heller uppräknare från olika uppräkningar.
För att definiera enum klass använder vi klass nyckelord efter enum nyckelord.
Syntax:
// Declaration enum class EnumName{ Value1, Value2, ... ValueN}; // Initialisation EnumName ObjectName = EnumName::Value;> Exempel:
// Declaration enum class Color{ Red, Green, Blue}; // Initialisation Color col = Color::Red;> Nedan är en implementering för att visa Enum Class
CPP
numrera alfabetet
// 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
It's not Red Good people 1>
Uppräknade typer som deklarerats som enum-klassen har också mer kontroll över sin underliggande typ; det kan vara vilken integral datatyp som helst, såsom char, short eller unsigned int, som i huvudsak tjänar till att bestämma storleken på typen.
Detta specificeras av ett kolon och underliggande typ efter den uppräknade typen:
eg: enum class eyecolor : char {char,green,blue}; Here eyecolor is a distinct type with the same size as a char (1 byte).> C++
java hashmap
#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>
Referens: https://en.cppreference.com/w/cpp/language/enum