logo

Класи Enum у C++ та їх переваги над Enum DataType

Enums або Enumerated тип (перерахування) це визначений користувачем тип даних, якому можна призначити деякі обмежені значення. Ці значення визначаються програмістом під час оголошення перерахованого типу.

Необхідність класу Enum замість типу Enum:
Нижче наведено деякі причини щодо обмежень типу Enum і чому нам потрібен клас Enum для їх покриття.



1.Enum — це набір іменованих цілочисельних констант, що означає, що кожному елементу присвоєно ціле значення. 2. Він оголошується за допомогою ключового слова 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;> }>

>

>

ціле число для подвоєння java
Вихід

The roll no of avinash=68>

Два перерахування не можуть використовувати однакові імена:

CPP




випадкове число gen java

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

>

>

Помилка компіляції:

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

Жодна змінна не може мати назву, яка вже є в якомусь переліку:

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

>

>

Помилка компіляції:

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

Enum не є типобезпечний :

CPP

рядок обробки java




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

>

>

УВАГА:

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

C++11 представив класи enum (також звані обмежені перерахування ), що робить перерахування обома строго типізований і чітко обмежений . Клас enum не дозволяє неявне перетворення в int, а також не порівнює перерахунки з різних перерахувань.
Щоб визначити клас enum, ми використовуємо ключове слово class після ключового слова enum.
Синтаксис:

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

приклад:

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

Нижче наведено реалізацію для показу класу Enum

CPP




пустота 0
// 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;> }>

>

>

Вихід

It's not Red Good people 1>

Перераховані типи, оголошені класом enum, також мають більше контролю над своїм основним типом; це може бути будь-який інтегральний тип даних, такий як char, short або unsigned int, який, по суті, служить для визначення розміру типу.

Це вказується двокрапкою та базовим типом після перерахованого типу:

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

>

java indexof

>

Вихід

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

Посилання: https://en.cppreference.com/w/cpp/language/enum