logo

Enum-Klassen in C++ und ihr Vorteil gegenüber Enum DataType

Aufzählungen oder Aufzählungstyp (Aufzählung) ist ein benutzerdefinierter Datentyp, dem einige begrenzte Werte zugewiesen werden können. Diese Werte werden vom Programmierer zum Zeitpunkt der Deklaration des Aufzählungstyps definiert.

Bedarf an Enum-Klasse über Enum-Typ:
Im Folgenden finden Sie einige Gründe dafür, welche Einschränkungen der Enum-Typ hat und warum wir die Enum-Klasse benötigen, um diese abzudecken.



1.Enum ist eine Sammlung benannter Ganzzahlkonstanten, d. h. jedem Element wird ein ganzzahliger Wert zugewiesen. 2.Es wird mit dem Schlüsselwort enum deklariert.

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

>

>

Starten Sie MySQL Ubuntu neu
Ausgabe

The roll no of avinash=68>

Zwei Aufzählungen dürfen nicht dieselben Namen haben:

CPP




Skript-Shell ausführen
#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;> }>

>

>

Kompilierungsfehler:

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

Keine Variable kann einen Namen haben, der bereits in einer Aufzählung enthalten ist:

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

>

>

Kompilierungsfehler:

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

Aufzählungen sind es nicht typsicher :

CPP


Unterschied zwischen einem Gigabyte und einem Megabyte



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

>

>

Warnung:

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 hat Enum-Klassen eingeführt (auch „ bereichsbezogene Aufzählungen ), das macht Aufzählungen beides stark typisiert und stark umfangreich . Die Klasse enum erlaubt keine implizite Konvertierung in int und vergleicht auch keine Enumeratoren aus verschiedenen Enumerationen.
Um die Enum-Klasse zu definieren, verwenden wir das Schlüsselwort class nach dem Schlüsselwort enum.
Syntax:

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

Beispiel:

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

Unten finden Sie eine Implementierung zur Anzeige der Enum-Klasse

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

Funktionen von Arduino
>

>

Ausgabe

It's not Red Good people 1>

Aufzählungstypen, die als Enum-Klasse deklariert sind, haben außerdem mehr Kontrolle über ihren zugrunde liegenden Typ. Dabei kann es sich um einen beliebigen ganzzahligen Datentyp wie char, short oder unsigned int handeln, der im Wesentlichen dazu dient, die Größe des Typs zu bestimmen.

Dies wird durch einen Doppelpunkt und einen zugrunde liegenden Typ angegeben, der dem Aufzählungstyp folgt:

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

>

>

Ausgabe

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

Referenz: https://en.cppreference.com/w/cpp/sprache/enum