Transferts en C ++ (enum)





énumération C ++, c ++ liste, énumération c ++, enum c ++

transfert (enum) utilisé pour créer des constantes d'un C. Допустим надо объявить константы для музыкальных нот и каждую инициализировать соответствующим порядковым номером. Vous pouvez utiliser une façon familière:

énumération C ++, c ++ liste, énumération c ++, enum c ++

Такое объявление занимает много строк кода и не совсем удобно. Utilisation de fiche, Ces constantes peuvent être déterminées autrement. syntaxe enum similaire à la syntaxe structures: mot-clé – descripteur – элементы в фигурных скобках через запятую :

énumération C ++, c ++ liste, énumération c ++, enum c ++

Ceci est la forme complète – descripteur (le nom de l'énumération). Comme dans le cas avec structures, indiquant le nom, vous ne pouvez pas utiliser:

énumération C ++, c ++ liste, énumération c ++, enum c ++

Dans le premier cas, – мы сможем создавать переменные типа перечисления notes. Dans le second cas, – aucun.

S'il vous plaît noter, que la valeur 1 Il a été donné uniquement au premier élément de la liste. Par défaut, le premier élément dans les accolades sont affectées d'une valeur 0, le second plus (1), la troisième est l'un de plus que le deuxième (2) etc. Mais si vous définissez explicitement la valeur, comme dans l'exemple, l'augmentation de l'appareil commence avec ce nombre. Nous allons montrer à l'écran les valeurs de certains éléments de l'énumération.

La console affiche:énumération C ++, c ++ liste, énumération c ++, enum c ++

Bien que nous ne sommes pas attribuer des valeurs explicitement et SOL – ils gardent les numéros de série de notes correctes.

Les noms des agents recenseurs (articles énumérés) doit être unique. Les valeurs peuvent aussi être identiques:

sens 1 будут хранить KLICHKO_VITALIY et KLICHKO_VLADIMIR. 2 zapishetsya dans Chisora, 3 – dans ADAMEK . Les éléments énumérés peuvent être enregistrés uniquement des nombres entiers. Changement dans le programme suivant les valeurs, sont affectés aux éléments entre accolades ne peut pas être. Si vous créez une variable de type liste – il ne peut prendre la valeur de l'un de ses éléments:

énumération C ++, c ++ liste, énumération c ++, enum c ++

La photo montre, que le dossier type de variable du numéro champions est impossible. Vous ne pouvez enregistrer une constante nommée, qui est déclarée au moment de la détermination enum.

Par exemple, envisager la fixation. В нём создадим перечисление levelsName. Il contiendra six éléments – “nom” étages. Пользователю предложим “aller pour un lecteur” l'ascenseur.

Nous déclarons une variable entière sol en ligne 10 и инициализируем ее именованной константой parking. si sol valorisera 0. En ligne 13 entrer tandis que la boucle. Пока пользователь не введет в переменную exitOrNot sens 0, le programme va lui offrir “prendre l'ascenseur” – sélectionner le numéro de l'étage. Après chaque étages de sélection des sons d'alarme (Trois bips courts) и на экран выводится номер этажа и информация о том, qui est placé sur elle. Pour ce faire, оператором выбора switch. Его блоки cas la liste des éléments triés. Autrement dit, l'utilisateur saisit un nombre entier, et cas recherche, lequel des éléments énumérés il répond. par exemple, si elle est introduite 5 – это соответствует значению элемента Restaurant на экран выводится соответствующее сообщение.

résultat:

énumération C ++, c ++ liste, énumération c ++, enum c ++

Regardez une courte vidéo sur le transfert C ++. Il est en anglais, mais il est facile de comprendre, après avoir lu l'article:

Pour soutenir notre site – cliquez sur la tirelire et choisir un moyen pratique.

Bulletin de nouvelles leçons sur la programmation:


Je suis d'accord pour recevoir des messages de purecodecpp.com sur mon e-mail

date
page
Transferts en C ++
évaluation
5

4 réflexions sur "Transferts en C ++ (enum)

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

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

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

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

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

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

    struct Unit {
    nom de chaîne;
    int unit_type;
    };

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

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

    enum UnitType { Mag, Goblin, Elf };
    struct Unit {
    unit_type type;
    nom de chaîne;
    };

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

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

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

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

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

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

    #comprendre
    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 sortie = 1;
    cout <<"Вы зашли в здание и сейчас находитесь на " << oneFloor << " этаже \n";
    faire
    {
    cout <> lift;
    interrupteur (lift)
    {
    cas(undParking):
    cout << "Вы попали в подземную автостоянку \n";
    Pause;
    cas(oneFloor):
    cout << "Вы на первом этаже \n";
    cout <> Sortie;
    si (sortie == 0)
    {
    cout << "Вы вышли из здания \n";
    }
    Pause;
    cas(secondFloor):
    cout << "Вы на втором этаже \n";
    Pause;
    cas(Restaurant):
    cout << "Вы в ресторане \n";
    Pause;
    cas(Penthaus):
    cout << "Вы в пентхаусе \n";
    Pause;
    défaut:
    cout << "Нет такого этажа \n";
    }
    } tandis que (sortie == 1);
    retour 0;
    }

    /pré

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>