В C++ можно определить список именованных целочисленных констант. Такой список называется перечислением (enumeration). Эти константы можно затем использовать везде, где допустимы целочисленные значения (например, в целочисленных выражениях). Перечисления определяются с помощью ключевого слова
enum type_name { список_перечисления } список_переменных;
Под элементом
enum apple {Jonathan, Golden_Del, Red_Del, Winesap, Cortland, McIntosh} red, yellow;
Определив перечисление, можно объявить другие переменные этого типа, используя имя перечисления. Например, с помощью следующей инструкции объявляется одна переменная
apple fruit;
Эту инструкцию можно записать и так.
enum apple fruit;
Однако использование ключевого слова
С учетом предыдущих объявлений следующие типы инструкций совершенно допустимы.
fruit = Winesap;
if(fruit==Red_Del) cout << "Red Delicious\n";
Важно понимать, что каждый символ списка перечисления означает целое число, причем каждое следующее число (представленное идентификатором) на единицу больше предыдущего. По умолчанию значение первого символа перечисления равно нулю, следовательно, значение второго — единице и т.д. Поэтому при выполнении этой инструкции
cout << Jonathan << ' ' << Cortland;
на экран будут выведены числа
Несмотря на то что перечислимые константы автоматически преобразуются в целочисленные, обратное преобразование автоматически не выполняется. Например, следующая инструкция некорректна.
fruit =1; // ошибка
Эта инструкция вызовет во время компиляции ошибку, поскольку автоматического преобразования целочисленных значений в значения типа
fruit = (apple) 1; // Теперь все в порядке, но стиль не совершенен.
Теперь переменная
Используя инициализатор, можно указать значение одной или нескольких перечислимых констант. Это делается так: после соответствующего элемента списка перечисления ставится знак равенства и нужное целое число. При использовании инициализатора следующему (после инициализированного) элементу списка присваивается значение, на единицу превышающее предыдущее значение инициализатора. Например, при выполнении следующей инструкции константе
enum apple {Jonathan, Golden_Del, Red_Del, Winesap=10, Cortland, McIntosh};
Часто в отношении перечислений ошибочно предполагается, что символы перечисления можно вводить и выводить как строки. Например, следующий фрагмент кода выполнен не будет.
// Слово "McIntosh" на экран таким образом не попадет.
fruit = McIntosh;
cout << fruit;
He забывайте, что символ
switch(fruit) {
case Jonathan: cout << "Jonathan";
break;
case Golden_Del: cout << "Golden Delicious";
break;
case Red_Del: cout << "Red Delicious";
break;
case Winesap: cout << "Winesap";
break;
case Cortland: cout << "Cortland";