Aufzählungstyp


Wie wir bereits gesehen haben, können Strukturen als eine Möglichkeit betrachtet werden, um benutzerdefinierte Datentypen bereitzustellen. Ein anderer Weg, um seine eigenen Datentypen zu definieren, ist der Aufzählungsdatentyp. Dieses Leistungsmerkmal von C++ ist weniger bedeutend als die Stukturen. Sie können in C++ annährend perfekte objektorientierte Programme schreiben, ohne irgendwelche Kenntnisse über Aufzählungstypen zu haben. Die Aufzählungstypen verkörbern aber den Geist von C++ in der Art, daß sie Ihnen die Definition Ihrer eigenen Datentypen erlauben und dadurch zur Vereinfachung und Eindeutigkeit Ihrer Programmierung beitragen. C++-Programmierer verwenden Aufzählungstypen gelegendlich. (C-Programmierer setzen sie weniger häufig ein.) Aufzählungstypen stehen auch in Pascal zur Verfügung.

Wochentage

Aufzählungstypen funktionieren, wenn Sie im voraus eine begrenzte (normalerweise kurze) Liste von Werten wissen, die ein Datentyp annehen kann. Hier folgt ein Beispielprogramm, DAYENUM, welches den Aufzählungstyp für die Wochentage verwendet:

// dayenum.cpp // Veranschaulicht enum-Typen #include <iostream.h> // Festlegen des enum-Typs enum days_of_week { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; void main() { days_of_week day1, day2; // Variable definieren vom Typ days_of_week day1 = Mon; // Werte an die day2 = Die; // Variablen gegen int diff = day2 - day1; // Ganzzahlarithmetik ist möglich cout << "Tagesdifferenz = " << diff << endl; if (day1 < day2) cout << "Tag 1 kommt vor Tag2\n"; }

Aufzählend meint, daß alle Werte aufgelistet sind. Dies ist nicht wie bei der Festlegung eines int-Typs, beispielsweise, welcher sozusagen in einem Bereich möglicher Werte angegeben wird. In einem enum-Typ muß man jedem möglichen Wert einen spezielen Namen geben.

Hier ist die ausgabe des Programms:

Tagesdifferenz = 3
Tag 1 kommt vor Tag 2

Der Aufbau des Kartenspiels

Lassen Sie uns ein andere Art von Beispiel untersucuen. Dieses Beispiel verwendet eine Struktur, um eine Spielkarte nachzubilden. Das Programm ahnt ein Spiel nach, das von Trickbetrügern (professionellen Spielern) auf Volksfesten oder bei anderen Gelegenheiten angeboten wird. Der Kartenhai zeigt Ihnen drei Karten, legt sie dann verdeckt auf den Tisch und vertauscht ihre Positionen mehrere Male untereinander. Wenn Sie richtig raten, wo sich eine bestimmte Karte befindet, haben Sie gewonnen. Alles geschieht direkt vor Ihren Augen, aber der Kartenhai wechselt die Karten so schnell und verwirrend untereinander aus, daß der Spieler fast nie den Karten folgen kann und das Spiel verliert (welches natürlich um Geld gespielt wird).

Es folgt das Programmlisting für CARDS:

// cards.cpp // Veranschaulicht den Gebrauch von Srukturen bei der Nachbildung von Spielkarten #include <iostream.h> const int kreuz = 0; const int karo = 1; const int herz = 2; const int pik = 3; const int bube = 11; const int dame = 12; const int koenig = 13; const int as = 14; struct card { int number; // 2 bis 10, bube, dame, koenig, as int suit: // kreuz, karo, herz, pik }; void main() { card temp, chosen, prize; // Karten definieren int position; card card1 = { 7, kreuz }; // Initialisieren von card1 cout << "Karte 1 ist die Kreuz 7\n"; card card2 = { bube, herz }; // Initialisieren von card2 cout << "Karte 2 ist die Herzbube\n"; card card3 = { as, pik }; // Initialisieren von card3 cout << "Karte 3 ist das Pik-As\n"; prize = card3; // Kopieren der Karte, um sie im Gedächnis zu behalten cout << "Ich tausche Karte 1 und Karte 3\n"; temp = card3; card3 = card1; card1 = temp; cout << "Ich tausche Karte 2 und Karte 3\n"; temp = card3; card3 = card2; card2 = temp; cout << "Ich tausche Karte 1 und Karte 2\n"; temp = card2; card2 = card1; card1 = temp; cout << "Nun, wo befindet sich (1, 2 oder 3) das Pik-As? "; cin >> position; switch(position) { case 1: chosen = card1; break; case 2: chosen = card2; break; case 3: chosen = card3; break; } if(chosen.number == prize.number && chosen.suit == prize.suit) // Verkleicht Karten cout << "DAs ist richtig! Sie haben gewonnen!\n"; else cout << "Schade. Sie haben verloren.\n"; }


32