Перечислимый тип в С++ вводится ключевым словом enum и задает набор значений, определяемый пользователем. Набор значений заключается в фигурные скобки и является набором целых именованных констант, представленных своими идентификаторами. Эти константы называются перечислимыми константами. Рассмотрим объявление:
enum Suit {CLUBS, DIAMONDS, HEARTS, SPADES};
С его помощью создается целочисленный тип набором из четырех названий мастей, именующих целочисленные константы. Перечислимые константы - это идентификаторы CLUBS, DIAMONDS, HEARTS и SPADES, имеющие значения - 0, 1, 2 и 3, соответственно. Эти значения присвоены по умолчанию. Первой перечислимой константе присваивают постоянное целое численное значение 0. Каждый последующий член списка на единицу больше, чем его сосед слева. Переменным типа Suit, определенного пользователем, может быть присвоено только одно из четырех значений, объявленных в перечислении
Другой популярный пример перечислимого типа:
enum Months {JAN = 1, FEB, MAR, APR, MAY, YUN, YUL AUG, SEP, OCT, NOV, DEC};
Это объявление создает определенный пользователем тип Months с константами перечисления, представляющими месяцы года. Поскольку первое значение приведенного перечисления установлено равным 1, оставшиеся значения увеличиваются на 1 от 1 до 12.
В объявлении перечислимого типа любой константе перечисления можно присвоить целое значение.
Примечание: Типичная ошибка. После того, как константа перечисления определена, попытка присвоить ей другое значение является синтаксической ошибкой. Основные моменты использования перечислений. 1. Использование перечислений вместо целых констант облегчает чтение программы.
2. Идентификаторы в enum должны быть уникальными, но отдельные константы перечисления могут иметь одинаковые целые значения.
3. Набор идентификаторов перечислимого типа — собственный уникальный тип, отличающийся от других целочисленных типов.
4. Перечислимые константы могут определяться и инициализироваться произвольными целочисленными константами, а также константными выражениями:
enum ages (milton = 47, ira, harold = 56, philip = harold + 7};
Примечание: Обратите внимание на то, что когда нет явного инициализатора, применяется правило по умолчанию, таким образом - ira = 48. Кроме того, значения перечислимых констант могут быть не уникальными. 5. Каждое перечисление является отдельным типом. Типом элемента перечисления является само перечисление. Например, в
enum Keyword {ASM, AUTO, BREAK}; AUTO имеет тип Keyword.
6. Перечислимая константа может быть объявлена анонимно, то есть без имени типа.
enum {FALSE, TRUE}; enum {lazy, hazy, crazy} why;
Первое объявление — распространенный способ объявления мнемонических целочисленных констант. Второе объявление объявляет переменную перечислимого типа why, с допустимыми значениями этой переменной lazy,hazy и crazy.
7. Перечисления могут неявно преобразовываться в обычные целочисленные типы, но не наоборот.
enum boolean {FALSE, TRUE} q; enum signal {off, on} a = on; //а инициализируется в on enum answer {no, yes, maybe = -1} b; int i, j = true; //верно true преобразуется в 1 a = off; //верно і = а; //верно i становится 1 q = а; //неверно два различных типа q = (boolean)а; //верно явное преобразование приведением