Enums ali Enumerated tip (enumeration) je uporabniško definiran podatkovni tip, ki mu je mogoče dodeliti nekaj omejenih vrednosti. Te vrednosti določi programer ob deklaraciji oštevilčenega tipa.
Potreba po razredu Enum namesto tipa Enum:
Spodaj je nekaj razlogov, kakšne so omejitve tipa Enum in zakaj potrebujemo razred Enum, da jih pokrijemo.
1.Enum je zbirka poimenovane celoštevilske konstante, kar pomeni, da je vsakemu elementu dodeljena celoštevilska vrednost. 2. Naveden je s ključno besedo 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;> }> |
>
>
mikrolitsko jedroIzhod
The roll no of avinash=68>
Dva naštevanja ne more deliti istih imen:
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;> }> |
>
>
java case statement
Napaka pri kompilaciji:
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; ^> Nobena spremenljivka ne more imeti imena, ki je že v nekem oštevilčevanju:
CPP
vsebuje metodo java
#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;> }> |
>
>
Napaka pri kompilaciji:
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, ^> Enumi niso tipsko varen :
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;> }> |
>
>
Opozorilo:
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 razred
C++11 je uvedel razrede enum (imenovane tudi obsegna naštevanja ), zaradi česar sta naštevanja oboje močno tipiziran in močno omejen . Razred enum ne dovoljuje implicitne pretvorbe v int in tudi ne primerja enumeratorjev iz različnih enumeracij.
Za definiranje razreda enum uporabimo ključno besedo class za ključno besedo enum.
Sintaksa:
// Declaration enum class EnumName{ Value1, Value2, ... ValueN}; // Initialisation EnumName ObjectName = EnumName::Value;> primer:
// Declaration enum class Color{ Red, Green, Blue}; // Initialisation Color col = Color::Red;> Spodaj je implementacija za prikaz razreda Enum
CPP
10 od 10
// 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;> }> |
>
>Izhod
It's not Red Good people 1>
Našteti tipi, ki so razglašeni za razred enum, imajo tudi večji nadzor nad svojim osnovnim tipom; lahko je katerikoli integralni podatkovni tip, kot je char, short ali unsigned int, ki v bistvu služi za določanje velikosti tipa.
To je določeno z dvopičjem in osnovnim tipom, ki sledi oštevilčenemu tipu:
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:'< |
>
>
kako velik je moj monitorIzhod
size of enum rainbow variable: 4 size of enum class eyecolor variable:1>
Referenca: https://en.cppreference.com/w/cpp/language/enum