Перечисления enum — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
Строка 13: Строка 13:
 
Вызов такой функции может выглядеть так:  
 
Вызов такой функции может выглядеть так:  
 
<source lang="cpp">processKeyword(BREAK);</source>
 
<source lang="cpp">processKeyword(BREAK);</source>
Для обработки элементов перечислений обычно используют [[оператор switch]].
+
'''Для обработки элементов перечислений внутри функций обычно используют [[оператор switch]]'''.
  
 
Стоит учитывать, что перечисление не образуют ''области видимости'' (''scope''), потому имена в различных перечислениях должны отличаться друг от друга (и от других констант и имён функций). Значения различных элементов внутри одного перечисления могут совпадать.
 
Стоит учитывать, что перечисление не образуют ''области видимости'' (''scope''), потому имена в различных перечислениях должны отличаться друг от друга (и от других констант и имён функций). Значения различных элементов внутри одного перечисления могут совпадать.

Версия 14:34, 30 октября 2012

Перечисление enum это тип, который может хранить набор именованных целочисленных значений, заданных пользователем.

enum {FOR, AUTO, BREAK};

определяет три целочисленных константы, называемые элементами перечисления, и присваивает им значения. Определение типа enum может находиться в cpp-файле на самом верхнем уровне (то есть снаружи от функций), а также в заголовочных файлах (чтобы согласованно использовать имена констант в разных cpp-файлах).

По умолчанию, элементам перечисления присваиваются значения начиная с нуля; значение для каждого следующего элемента увеличиваются на единицу. Таким образом, в примере выше FOR == 0, AUTO == 1 и BREAK == 2. Перечислению можно присвоить имя. Например:

enum keyword {FOR, AUTO, BREAK};

Элементам перечисления можно задавать значения явно. Если задана только часть значений, то нумерация продолжается автоматически начиная с последнего указанного значения, например:

enum keyword {FOR, AUTO = 3, BREAK};

Имеем FOR == 0, AUTO == 3 и BREAK == 4.

После своего определения перечисление используется почти так же, как и целые типы. Можно объявлять переменные или параметры функций соответствующего типа (в нашем примере — типа keyword). Однако зачастую именами из типа перечисления пользуются как обычными целочисленными константами и сравнивают с ними переменные обычных целочисленных типов, например int. Тем не менее, если функция в качестве параметра должна принимать элемент перечисления, то лучше явно указать в качестве типа этого параметра имя перечисления, а не просто int:

void processKeyword(keyword kw);

Вызов такой функции может выглядеть так:

processKeyword(BREAK);

Для обработки элементов перечислений внутри функций обычно используют оператор switch.

Стоит учитывать, что перечисление не образуют области видимости (scope), потому имена в различных перечислениях должны отличаться друг от друга (и от других констант и имён функций). Значения различных элементов внутри одного перечисления могут совпадать.

Обратите внимание, что для элементов перечислений, как и для всех константных значений, принято использовать имена в верхнем регистре.

См. также