logo

Clasele Enum în C++ și avantajele lor față de Enum DataType

Enumări sau tip enumerat (enumerare) este un tip de date definit de utilizator căruia i se pot atribui niște valori limitate. Aceste valori sunt definite de programator la momentul declararii tipului enumerat.

Necesitatea clasei Enum peste tipul Enum:
Mai jos sunt câteva dintre motivele pentru care sunt limitările tipului Enum și de ce avem nevoie de clasa Enum pentru a le acoperi.



1.Enum este o colecție de constante numere întregi înseamnă că fiecare element este atribuit printr-o valoare întreagă. 2.Este declarat cu cuvântul cheie 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;> }>

>

>

șirul este gol
Ieșire

The roll no of avinash=68>

Două enumerari nu pot împărtăși aceleași nume:

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;> }>

f filme
>

>

Eroare de compilare:

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; ^>

Nicio variabilă nu poate avea un nume care este deja într-o enumerare:

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;> }>

>

>

Eroare de compilare:

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, ^>

Enumerile nu sunt tip sigur :

CPP




Verificarea java este nulă

#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;> }>

>

katrina kaif
>

Avertizare:

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) ^>

Clasa Enum

C++11 a introdus clase de enumerare (numite și enumerari cu scop ), care face enumerari ambele puternic tipărit și puternic acoperit . Enum de clasă nu permite conversia implicită în int și, de asemenea, nu compară enumeratorii din enumerari diferite.
Pentru a defini clasa enum folosim cuvânt cheie class după cuvânt cheie enum.
Sintaxă:

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

Exemplu:

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

Mai jos este o implementare pentru a afișa clasa Enum

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;> }>

>

>

Ieșire

It's not Red Good people 1>

Tipurile enumerate declarate clasa enum au, de asemenea, mai mult control asupra tipului lor subiacent; poate fi orice tip de date integral, cum ar fi char, short sau unsigned int, care servește în esență la determinarea mărimii tipului.

Acesta este specificat de două puncte și de tipul subiacent după tipul enumerat:

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

C++

imagine ca fundal în css




#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:'<

>

>

Ieșire

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

Referinţă: https://en.cppreference.com/w/cpp/language/enum