Перечислимый тип описывается с помощью ключевого слова enum следующим образом:
{
значение 1,
значение 2,
значение 3,
…
значение N,
}
Затем объявляются переменные этого типа:
имяТипа имяПеременной;
Им присваиваются конкретные значения:
имяПеременной = имяТипа.значение;
Перечислимый тип обладает базовым типом(underlying type), который используется для хранения. Любое из значений, которые этот тип может принимать, будет храниться в памяти как значение базового типа (по умолчанию это тип int). Однако существует возможность задать в качестве базового другой тип, добавив к описанию типа имя его базового типа:
{
значение1,
значение2,
значение3,
…
значениеN,
}
Перечислимые типы могут использовать в качестве базовых следующие типы:
По умолчанию каждому значению перечислимого типа автоматически присваивается соответствующее значение базового типа, начиная с нуля, в том порядке, в котором они описаны. Другими словами, значение! получит базовое значение 0, значение2—1, значение3 — 2 и т.д.. Для того чтобы переопределить такой порядок, следует использовать оператор = и фактические базовые значения для каждого перечислимого значения:
{
значение1=- фактическоеЗначение1,
значение2 = фактическоеЗначение2,
значение3 = фактическоеЗначение3,
значениеN = фактическоеЗначениеN,
}
Кроме того, существует возможность задавать идентичные базовые значения для нескольких перечислимых значений, используя одно значение как базовое значение другого
{
значение1 = фактическоеЗначение1,
значение2 = значение2,
значение3,
значениеN = фактическоеЗначениеN,
}
Всем значениям, которые не указаны будут автоматически присвоены базовые значения: для этого используется последовательность, начинающаяся со значения, на единицу больше последнего явно заданного значения. В примере значение3 получит базовое значение равное значение1+1.