3.7. Перечисляемые типыВ предыдущем примере была использована переменная type_var, которая указывала номер используемой переменной, что не особенно удобно при написании сложных программ, где запомнить номер той или иной переменной структуры довольно сложно. Проще если переменную type_var инициализировать специальными словами, например,
Этого можно достичь, если type_var определить как перечисляемый тип, который задается с помощью ключевого слова enum следующим образом:
При этом объявление перечисляемого типа выполняется подобно объявлению структуры или объединения:
В результате для введенной переменной перечисляемого типа допустимо использование следующих операторов:
Анализ последнего оператора for показывает, что значения перечисляемого типа VT_NONE,…,VT_CHAR являются числами, которые имеют свои имена. Причем, VT_NONE = 0, VT_INT = 1, …, VT_CHAR = 3. В некоторых случаях использование имен удобнее использования цифр, т.к. их запоминать и ориентироваться в них проще, чем в числах. Перепишем пример хранения разнородной информации с использованием перечисляемого типа, получим:
Из приведенного примера видно, что использование перечисляемого типа делает программу более понятной и удобной при программировании. Здесь следует отметить, что если объявлены два перечисления
то числовые значения red, green, blue будут совпадать с соответствующими числовыми значениями vt_int, vt_float, vt_char. Это значит, что программный код if(clr == red) будет работать также как и if(clr == clr_red). Часто это не имеет принципиального значения, но, например, следующий оператор выдаст сообщение об ошибке:
Ошибка возникнет из-за того, что значение red и значение clr_red равны одному числу – 0, а оператор switch не допускает такой ситуации. Для того чтобы избежать такой ситуации, при задании перечисляемого типа допускаются следующие варианты:
В первом случае значения clr_red = 10, clr_green = 11, clr_blue = 12. Во втором - clr_red = 10, clr_green = 20, clr_blue = 30. В третьем - clr_red = 0, clr_green = 20, clr_blue = 21. Как видно из полученных значений, величины могут инициализироваться при задании перечисления, а если они не объявлены, то принимают значение на единицу больше предыдущего значения.
Видео по теме
С++ с нуля: урок 1 - переменные, оператор присваивания С++ с нуля: урок 2 - арифметические операции С++ с нуля: урок 3 - директивы препроцессора С++ с нуля, урок 4: условные операторы if и switch С++ с нуля: урок 5 - операторы циклов while, for и do while С++ с нуля: урок 6 - массивы, метод всплывающего пузырька С++ с нуля: урок 7 - строки и функции работы с ними С++ с нуля: урок 8 - функции: прототипы, перегрузка, рекурсия С++ с нуля: урок 9 - области видимости переменных С++ с нуля: урок 10 - битовые операции И, ИЛИ, НЕ, XOR С++ с нуля: урок 11 - структуры С++ с нуля: урок 12 - объединения, перечисления, typedef С++ с нуля: урок 13 - указатели и ссылки, выделение памяти С++ с нуля: урок 14 (часть 1) - функции работы с файлами С++ с нуля: урок 14 (часть 2) - функции работы с файлами С++ с нуля: урок 15 - стек, теория и практика С++ с нуля: урок 16 - связные списки, теория и практика С++ с нуля: урок 17 - бинарное дерево, теория и практика
|