Definition des Aufzählungstyps:Der Aufzählungstyp (Enumeration) ist ein abgeleiteter Datentyp in C++, der eine Sammlung mehrerer vom Benutzer definierter Aufzählungskonstanten ist.

Definitionsformat: Das Definitionsformat des Aufzählungstyps ist:

enum <类型名> {<枚举常量表>};

Formatbeschreibung:

  • Das Schlüsselwort enum — gibt an, dass der darauf folgende Bezeichner der Name eines Aufzählungstyps ist.
  • Aufzählungskonstantentabelle — zusammengesetzt aus Aufzählungskonstanten. "Aufzählungskonstanten" oder "Aufzählungselemente" sind ganzzahlige Größen, die in Form von Bezeichnern ausgedrückt werden und die Werte des Aufzählungstyps darstellen. Die Aufzählungskonstantentabelle listet alle Werte des Aufzählungstyps auf. Die Aufzählungskonstanten werden durch Kommas getrennt und müssen sich voneinander unterscheiden. Der Werttyp ist derselbe wie der eines Bedingungsausdrucks.

Anwendungsbeispiele:

enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color_set1
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week

Wichtige Hinweise:

Aufzählungskonstanten repräsentieren die möglichen Werte, die Variablen dieses Aufzählungstyps annehmen können. Das Kompilierungssystem weist jeder Aufzählungskonstante einen ganzzahligen Wert zu. Standardmäßig ist diese Ganzzahl die Sequenznummer des aufgelisteten Elements, beginnend bei 0. Ganzzahlige Werte können für einige oder alle Aufzählungskonstanten angegeben werden, wenn der Aufzählungstyp definiert wird. Aufzählungskonstanten vor dem angegebenen Wert nehmen weiterhin standardmäßig Werte an, während Aufzählungskonstanten nach dem angegebenen Wert Werte nach dem Prinzip der aufeinanderfolgenden Erhöhung um 1 annehmen. Die Werte der Aufzählungskonstanten können wiederholt werden. Zum Beispiel:

enum fruit_set {apple, orange, banana=1, peach, grape}
//枚举常量apple=0,orange=1, banana=1,peach=2,grape=3.
enum week {Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat};
//枚举常量Sun,Mon,Tue,Wed,Thu,Fri,Sat的值分别为7、1、2、3、4、5、6.

Aufzählungskonstanten können nur als Bezeichner dargestellt werden, nicht als Literalkonstanten wie Ganzzahl- oder Zeichentypen. Zum Beispiel ist die folgende Definition unzulässig:

enum letter_set {'a','d','F','s','T'}; //枚举常量不能是字符常量
enum year_set{2000,2001,2002,2003,2004,2005}; //枚举常量不能是整型常量

Sie kann in die folgende Form geändert werden, und die Definition wird zulässig:

enum letter_set {a, d, F, s, T};
enum year_set{y2000, y2001, y2002, y2003, y2004, y2005};

Verwendung von Aufzählungsvariablen

Der Hauptzweck der Definition von Aufzählungstypen besteht darin, die Lesbarkeit des Programms zu erhöhen. Eine der häufigsten und sinnvollsten Verwendungen von Aufzählungstypen ist die Beschreibung von Zustandsgrößen, was in Kapitel 9, Ein-/Ausgabe-Stream-Klassen, zu sehen sein wird.

Definitionsformat: Nach der Definition eines Aufzählungstyps können Variablen dieses Aufzählungstyps definiert werden, wie z. B.:

color_set1 color1, color2;

Der Typ und die Variablen können auch gleichzeitig definiert werden (sogar der Typname kann weggelassen werden), und zwar mit folgendem Format:

enum {Sun,Mon,Tue,Wed,Thu,Fri,Sat} weekday1, weekday2;

Zugehörige Operationen

Die Werte von Aufzählungsvariablen können nur die in der Tabelle der Aufzählungskonstanten aufgeführten Werte sein, die eine Teilmenge der Ganzzahlen ist.

Aufzählungsvariablen belegen denselben Speicherplatz wie Ganzzahlen.

Aufzählungsvariablen können nur an Zuweisungen, relationalen Operationen und Ausgabeoperationen teilnehmen. Bei der Teilnahme an Operationen werden ihre eigenen Ganzzahlwerte verwendet. Zum Beispiel sei folgende Definition gegeben:

enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;
enum color_set2 { GREEN, RED, YELLOW, WHITE} color3, color4;

Dann sind die zulässigen Zuweisungsoperationen wie folgt:

color3=RED;           //将枚举常量值赋给枚举变量
color4=color3;        //相同类型的枚举变量赋值,color4的值为RED
int  i=color3;        //将枚举变量赋给整型变量,i的值为1
int  j=GREEN;         //将枚举常量赋给整型变量,j的值为0

Die zulässigen relationalen Operationen sind: ==, <, >, <=, >=, != usw., zum Beispiel:

//比较同类型枚举变量color3,color4是否相等
if (color3==color4) cout<<"相等";
//输出的是变量color3与WHITE的比较结果,结果为1
cout<< color3<WHITE;

Aufzählungsvariablen können direkt ausgegeben werden, und ausgegeben wird der Ganzzahlwert der Variablen. Zum Beispiel:

cout<< color3;         //输出的是color3的整数值,即RED的整数值1

Beispiel

Eine Tasche enthält mehrere Bälle in fünf Farben: Rot, Gelb, Blau, Weiß und Schwarz. Jedes Mal werden drei Bälle unterschiedlicher Farbe aus der Tasche genommen. Zählen Sie und geben Sie alle möglichen Möglichkeiten aus.

Analyse:Da ein Ball nur eine der fünf Farben sein kann, kann ein Aufzählungstyp verwendet werden, um die Farbe des Balls darzustellen. Angenommen, die entnommenen Bälle sind i, j und k. Gemäß der Problemstellung können i, j und k jeweils fünf mögliche Werte annehmen, und i≠j≠k. Die Ausschöpfungsmethode kann verwendet werden, um jede mögliche Kombination einzeln zu prüfen, die Kombinationen zu finden, die die Anforderungen erfüllen, und sie auszugeben.

Beispiel

#include<iostream> #include<iomanip> using namespace std; int main(){ enum color_set {red,yellow,blue,white,black}; //Deklariere den Aufzählungstyp color color_set color; int i,j,k,counter=0,loop; //counter sammelt die Anzahl der Kombinationen mit unterschiedlichen Farben for(i=red;i<=black;i++) { for(j=red;j<=black;j++) { if(i!=j){ //Die ersten beiden Bälle haben unterschiedliche Farben for(k=red;k<=black;k++) if(k!=i&&k!=j){ //Der dritte Ball unterscheidet sich von den ersten beiden und erfüllt die Anforderung counter++; if((counter)%22==0){ //22 Zeilen pro Bildschirm anzeigen cout<<"Bitte Enter drücken, um fortzufahren"; cin.get(); } cout<<setw(15)<<counter; /*Im Folgenden wird jede Möglichkeit, Kugeln zu ziehen, ausgegeben; eine Zeile repräsentiert die drei Farben einer Möglichkeit*/ for(loop=1;loop<=3;loop++){ switch(loop){ case 1: color=(color_set) i; break; //Das erste ist i case 2: color=(color_set) j; break; //Das zweite ist j case 3: color=(color_set) k; break; //Das dritte ist k } switch(color){ case red: cout<<setw(15)<<"red"; break; case yellow:cout<<setw(15)<<"yellow";break; case blue: cout<<setw(15)<<"blue"; break; case white: cout<<setw(15)<<"white"; break; case black: cout<<setw(15)<<"black"; break; } } cout<<endl; //Eine neue Zeile nach der Ausgabe einer Möglichkeit ausgeben } } } } cout<<"Gesamt:"<<counter<<"ways"<<endl; return 0; }

Wichtige Hinweise

  • Aufzählungsvariablen können direkt ausgegeben, aber nicht direkt eingegeben werden. Zum Beispiel: cout >> color3; //ungültig
  • Einer Aufzählungsvariable kann keine Konstante direkt zugewiesen werden. Zum Beispiel: color1=1; //ungültig
  • Aufzählungsvariablen unterschiedlicher Typen können nicht gegenseitig zugewiesen werden. Zum Beispiel: color1=color3; //ungültig
  • Die Ein- und Ausgabe von Aufzählungsvariablen verwendet im Allgemeinen switch-Anweisungen, um sie in Zeichen oder Zeichenketten umzuwandeln; auch die andere Verarbeitung von Daten des Aufzählungstyps verwendet oft switch-Anweisungen, um die Zulässigkeit und Lesbarkeit des Programms sicherzustellen.