Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Марченко А.Л. -> "С++ бархатный путь " -> 65

С++ бархатный путь - Марченко А.Л.

Марченко А.Л. С++ бархатный путь — М.: Горячая линия - Телеком, 2005. — 399 c.
ISBN 5-93517-056-6
Скачать (прямая ссылка): barhatniyput2005.djvu
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 152 >> Следующая

167
6. Новые типы
Перечисления
Перечисление - это объявляемый программистом (не входящий в перечень основных типов) целочисленный тип, объединяющий поименованные целочисленные константы.
Несколько форм Бзкуса-Наура позволят определить место объявления перечисления среди множества объявлений C++:
Объявление ::—
1 СписокСпецщЬикаторовОбъявлвния / /спиеокОписатолей 1 ;
СписокСпвцификатороаОбъявлекия : :»
іСписокСпацифижаторовОбоявления 1 Специфик»торОбт.я»ления
СпецификаторОб**я»леиия :СпецификаторОсновногюТюта
:ш *****
СпацификаторОсиовкогоТипа :СпецификаторПаречисления
; т *****
СпецификаторПеречислекия : : -
•nun /ИмяПеречисленияj (;СписокПеречиолекия])
СписокПаречислеямя ::= ЭлементПерочисления
: :«¦ СписокПеречисления , ЭлекантПеречмслеккя
ИкиПаречиедения ::» Идентификатор
ЭлемеитПерачислеиия ::¦ Идентификатор
: :** Идентификатор ** КонстантиоеВыражамиа
Областью значения типа перечисления является фиксированное множество поименованных констант. Имя перечисления позволяет связать перечисление с конкретным идентификатором. Область область действия имени перечисления определяется расположением перечисления в тексте программы.
Элементы перечисления воспринимаются как константы (они и инициализируются константными выражениями) и могут употребляться везде, где используются константные выражения.
Таким образом, перечисления позволяют объявлять множества констант целого типа. Такие константы могли бы быть определены с помощью инструкций препроцессора:
tdefine ONE 1
Idefine TWO 2
168
#define THREE 3
¦define TEN 10
Их удобно использовать в операторах выбора switch, при определении массивов и вообще везде, где необходимо использовать целочисленные константы. В этом случае изменение алгоритма приводит к минимальным модификациям программного кода. Часто бывает достаточно изменения соответствующей инструкции препроцессора.
Однако у подобных объявлений имеется один недостаток. Инструкции препроцессора громоздки. Альтернативой подобным инструкциям являются перечисления, которые способны заменить десятки строк инструкций препроцессора одной единственной строкой, подобной строке, приведённой ниже:
«пив (ONE, TWO, THREE,..., TEN];
Перед нами один из спецификаторов объявления — так называемый спецификатор перечисления.
Для означивания элементов перечисления используется простой алгоритм. Назовём неинициализированным элементом перечисления элемент перечисления, представленный одним идентификатором. Инциали-зированным элементом перечисления будем называть элемент перечисления, состоящий из идентификатора, операции присвоения и константного выражения. При этом,
¦ если первым элементом перечисления оказывается неинициализированный элемент, то ему по умолчанию присваивается значение 0:
¦ инициализированному элементу перечисления присваивается значение, представленное соответствующим инициализатором:
¦ значение каждого следующего (слева направо) неинициализированного элемента увеличиваются на единицу по сравнению с предыдущим.
Имена переменных, и имена элементов перечисления имеют общую область действия имён, в пределах которой возможны конфликты.
Например,
enua color (red, orange, yellow);
enum fruit {apple, orange, kiwi >;/* Повторное описание "orange*.*/ enum bird (eagle, emu, kivi); /* Повторное описание "kiwi".*/
int eagle; /*тл здесь тоже оиибка! Повторное описание ''eagle''.*/
В одной и той же области действия имён не допускается объявления двух различных перечислений с одним и тем же именем. Так что добавление к трём ранее приведённым примерам перечислений (разумеется, соответствующим образом исправленным) ещё одного с совпадающим именем перечисления также вызывает сообщение об ошибке:
enun color (deepred, deeporange, deepyellowj;
/* Перечисление color ранее уже встречалось.*/
169
А вот безымянных перечислений в пределах одной области действия имён может быть сколько угодно! Главное, чтобы различались имена элементов перечисления.
епиш {onel, twol, fchreel);
«пив {one2, two2, thr««2); enum {one 3, two3, three3) ;
Значения перечислений не должны превышать максимальных допустимых значений для целочисленного знакового типа (эти значения определяются реализацией). Больше не существует никаких ограничений на значения элементов перечислений. Значение перечислителя считается определённым сразу за его инициализатором и потому возможны и такие перечисления:
enust (valued, value02 « 10, value03 — valua02 + valued);
enua )valuell - 100, value!2 — valuell + value02, v*lu«13 - value02>
Каждое объявление перечисления может определять новый целочисленный тип, который отличен от всех других целочисленных типов. Здесь-то и нужно имя перечисления.
color MyFirstColor; // Объявлена переменная тиля color.
Тип данных, определённый на основе перечисления color имеет свой собственный диапазон значений, которые были заданы при определении этого перечисления. И транслятор следит за соблюдением этого диапазона. Правда, не очень строго.
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 152 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.