Transfers in C ++ (enum)





Enumeration C ++, Listing c ++, Enumeration c ++, Enum c ++

Transfer (enum) verwendet, um eine C ++ Konstanten zu erstellen. Допустим надо объявить константы для музыкальных нот и каждую инициализировать соответствующим порядковым номером. Sie können eine bekannte Art und Weise verwenden:

Enumeration C ++, Listing c ++, Enumeration c ++, Enum c ++

Такое объявление занимает много строк кода и не совсем удобно. Mit Auflistung, Diese Konstanten können sonst bestimmt werden. Syntax enum ähnlich der Syntax Strukturen: Stichwort – Descriptor – элементы в фигурных скобках через запятую :

Enumeration C ++, Listing c ++, Enumeration c ++, Enum c ++

Dies ist die vollständige Form – Descriptor (der Name der Aufzählung). Wie in dem Fall mit Strukturen, den Namen, können Sie nicht verwenden:

Enumeration C ++, Listing c ++, Enumeration c ++, Enum c ++

Im ersten Fall – мы сможем создавать переменные типа перечисления Notizen. Im zweiten Fall, – Nein.

beachten Sie, dass der Wert 1 Es wurde nur auf das erste Element der Liste angegebenen. Standardmäßig sind das erste Element in den Klammern ein Wert zugewiesen 0, die zweite über (1), die dritte ist eine mehr als die zweite (2) usw. Aber wenn Sie setzen den Wert explizit, wie in Beispiel, Der Anstieg in dem Gerät wird mit dieser Nummer beginnen,. Wir werden die Werte einiger Elemente der Aufzählung auf dem Bildschirm.

Die Konsole zeigt:Enumeration C ++, Listing c ++, Enumeration c ++, Enum c ++

Obwohl wir weisen Sie nicht explizit Werte RE und SOL – sie halten die richtigen Seriennummern von Notizen.

Die Namen von Aufzählungs (Artikel aufgelistet) muss eindeutig sein. Die Werte können auch die gleiche:

Bedeutung 1 будут хранить KLICHKO_VITALIY und KLICHKO_VLADIMIR. 2 zapishetsya in CHISORA, 3 – in ADAMEK . Die aufgeführten Positionen können nur ganze Zahlen aufgezeichnet werden. Ändern Sie im Programm folgende Werte, auf die Elemente in geschweiften Klammern zugeordnet sind, können nicht sein. Wenn Sie eine Variable vom Typ Liste erstellen – es kann nur den Wert eines seiner Elemente nehmen:

Enumeration C ++, Listing c ++, Enumeration c ++, Enum c ++

Das Bild zeigt, dass die Datensatznummer Variablentyp Meister ist nicht möglich,. Sie können nur eine benannte Konstante aufzeichnen, die zum Zeitpunkt der Bestimmung erklärt enum.

Betrachten wir zum Beispiel Festsetzung. В нём создадим перечисление levelsName. Es enthält sechs Elemente – “Name” Etagen. Пользователю предложим “spazieren fahren” der Aufzug.

Wir erklären, eine Integer-Variable Boden in Zeile 10 и инициализируем ее именованной константой Parken. so Boden wird Wert auf 0. On line 13 eingeben while-Schleife. Пока пользователь не введет в переменную exitOrNot Bedeutung 0, das Programm wird ihm anbieten “Fahrt mit dem Aufzug” – Wählen Sie die Nummer der Etage. Nach jedem Alarmtöne Auswahl Etagen (Drei kurze Pieptöne) и на экран выводится номер этажа и информация о том, dass auf sie gesetzt. Dies erfolgt, оператором выбора switch. Его блоки Fall sortiert Auflistung Elemente. Das heißt, gibt der Benutzer eine ganze Zahl, und Fall Suche, welche der aufgeführten Punkte erfüllt er. beispielsweise, wenn eingeführt 5 – это соответствует значению элемента Restaurant на экран выводится соответствующее сообщение.

Ergebnis:

Enumeration C ++, Listing c ++, Enumeration c ++, Enum c ++

Sehen Sie sich ein kurzes Video über die Transfers C ++. Es ist auf Englisch, aber es ist leicht zu verstehen,, nach dem Lesen des Artikels:

Zur Unterstützung unserer Website – klicken Sie auf das Sparschwein und wählen Sie eine beliebige bequeme Weise.

Newsletter neue Lektionen über die Programmierung:

Transfers in C ++ (enum)
5 (100%) 2 Stimmen

6 Gedanken zu "Transfers in C ++ (enum)

  1. Нормальные примеры, а статью не читал.

    Я сформулирую, а ты поправь пожалуйста, если со статьей я разойдусь в чем-то.

    1) Магические числаэто плохо, чтобы избавиться от них используют константы.

    2) Константыэто хорошо, но константы сильно связаны друг с другом.

    Beispiel: в программе у нас есть юнит. Юнит может быть магом, гоблином или эльфом. Одним из вариантов реализации этого могло быть что-то такое:

    const int Mag = 1;
    const int Goblin = 2;
    const int Elf = 3;

    struct Unit {
    string name;
    int unit_type;
    };

    offensichtlich, это плохо, потому что:
    2.1) константы Mag, Goblin, Elf доступны всем, dh. засоряют пространство имен;
    2.2) константы могут быть случайно использованы в неправильном контексте, ведь они не сгруппированы, dh. ничем не отличаются от других констант;
    2.3) полю unit_type можно присвоить неправильное значение (компилятор не сообщит нам об ошибке) :
    unit.unit_type = -123;
    2.4) нам надо придумывать самим значения константам и следить чтобы они не повторялись.

    Все эти проблему эротично решает enum:

    enum UnitType { Mag, Goblin, Elf };
    struct Unit {
    unit_type type;
    string name;
    };

    обратиться к константам мы можем как напрямую (Mag) так и по имени перечисления (UnitType::Mag). Второй вариант обозначает явно контекст, но вроде бы появился в С++11 (раньше его поддерживало большинство компиляторов, но стандарту вроде как оно не соответствовало).

    unit.unit_type = 123;
    завершится ошибкой на этапе компиляции (dh. очень рано). А если вы юзаете современную IDEто еще раньше (среда разработки подчеркнет ошибку).

    Ну и значения им присвоены автоматически, следить за этим не надо.

    Код можно сделать чуть красивей:
    struct Unit {
    unum Type {Mag, Goblin, Elf} type;
    string name;
    };

    Это может быть лучше, tk. offensichtlich, что Unit и Type неразрывно связаны (раньше мы кодировали это в имени UnitType). Кодировать что-то в имени не очень хорошо, например если бы Unit переименовали бы в Itemто нам пришлось бы переименовывать ItemType, или связь стала бы не очевидна.
    Unit::Type::Mag лаконично задает контекст, в котором может использоваться константа.

  2. Мой вариант решения задачки из примера:
    pre class=lang:c ++ dekodieren:wahr ”

    #einschließen
    using namespace std;

    int main()
    {
    setlocale(LC_ALL, “rus”);
    enum lewels {undParking = -1, oneFloor = 1, secondFloor = 2, Restaurant = 3, Penthaus = 4};
    int lift = 0;
    int exit = 1;
    cout <<"Вы зашли в здание и сейчас находитесь на " << oneFloor << " этаже \n";
    machen
    {
    cout <> lift;
    Schalter (lift)
    {
    Fall(undParking):
    cout << "Вы попали в подземную автостоянку \n";
    Unterbrechung;
    Fall(oneFloor):
    cout << "Вы на первом этаже \n";
    cout <> Ausfahrt;
    ob (Ausfahrt == 0)
    {
    cout << "Вы вышли из здания \n";
    }
    Unterbrechung;
    Fall(secondFloor):
    cout << "Вы на втором этаже \n";
    Unterbrechung;
    Fall(Restaurant):
    cout << "Вы в ресторане \n";
    Unterbrechung;
    Fall(Penthaus):
    cout << "Вы в пентхаусе \n";
    Unterbrechung;
    Standard:
    cout << "Нет такого этажа \n";
    }
    } während (Ausfahrt == 1);
    Rückkehr 0;
    }

    /Vor

  3. Перечисления в языке C++ прямо наследуют поведение перечислений языка C, за исключением того, что перечисляемый тип в C++ — настоящий тип, и ключевое слово

    1. Цитата из описания языков C и C++:
      > В версии С89 определено 32 ключевых слова.
      > …
      > enum — Пользовательский тип данныхперечисляемый тип
      > …
      > В языке C++ содержатся все ключевые слова, определенные в версии С89, а также следующие.

      И где здесь различие?

Hinterlasse eine Antwort

Deine Email-Adresse wird nicht veröffentlicht. erforderliche Felder sind markiert *