ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 4) онлайн
Дни недели
Перечисления используются в тех случаях, когда переменные создаваемого типа могут принимать заранее известное конечное (и, как правило, небольшое) мно- жество значений. Приведем простой пример, DAYENUM, в котором перечисления используются для создания типа данных, хранящего дни недели.
// dayenum.cpp
// применение перечислений
#include <iostream>
using namespace std;
// объявление перечисляемого типа
enum days_of_week { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
int main()
{
days_of_week day1, day2; // определения переменных,
// хранящих дни недели
day1 = Mon; // инициализация переменных
day2 = Thu;
int diff = day2 - day1; // арифметическая операция
cout << "Разница в днях: " << diff << endl;
if( day1 < day2) // сравнение
cout << "day1 наступит раньше, чем day2\n";
return 0;
}
Объявление типа начинается со слова enum и содержит перечисление всех возможных значений переменных создаваемого типа. Эти значения называются константами перечисляемою типа. Перечисляемый тип days_of_week включает 7 констант перечисляемого типа: Sun, Mon, Tue и т. д. до Sat. На рис. 4.8 приведен синтаксис объявления перечисляемого типа.

Рис. 4.8. Синтаксис спецификатора enum
Итак, перечисление представляет собой список всех возможных значений. В этом отношении тип int отличается от перечислений, поскольку он задается
тип enum

Небольшое число значений поименовано, и обращение к ним происходит по именам
тип int
Когда значений много, они не именуются; обращение по значениям

Рис. 4.9. Использование типов int и enum
Когда тип days_of_week определен, можно определять и переменные этого ти- па. В программе DAYENUM мы используем две переменные типа days_of_week:
days_of_week day1, day2;
В языке C в подобных объявлениях было необходимо использовать ключе- вое слово enum:
enum days_of_week day1, day2;
но язык C++ устранил эту необходимость.
Переменным перечисляемого типа можно присваивать любое из значений, указанных при объявлении типа. Например, переменным day1 и day2 из нашей последней программы мы присваиваем значения Mon и Thu. Присваивание зна- чений, не указанных при перечислении, например
day1 = halloween;
не допускается.
Перечисляемые типы данных допускают применение основных арифметиче- ских операций. В частности, в нашей программе производится вычитание двух пе- ременных перечисляемого типа. Кроме того, перечисляемые типы допускают
с помощью диапазона значений. Используя перечисления, необходимо давать имя каждому возможному значению создаваемого типа. Различие между типом int и перечисляемыми типами проиллюстрировано на рис. 4.9.
применение операции сравнения, что также используется в нашем примере. Результат работы программы DAYENUM выглядит следующим образом:
Разница в днях: 3
day1 наступит раньше, чем day2
Использование арифметических операций и операций отношения с перечис- ляемыми типами данных, как правило, не несет большой смысловой нагрузки. Например, если мы определили тип данных pets, хранящий названия домашних животных, следующим образом:
enum pets { cat, dog, hamster, canary, ocelot };
то неясен смысл выражений dog + canary или (cat < hamster) и т.п.
Внутренне перечисляемые типы данных представляются и обрабатываются как целые числа. Этот факт объясняет возможность применения к переменным перечисляемого типа арифметических операций и операций отношения. Фак- тически первое значение в списке рассматривается как число 0, второе — как число 1, и т. д. В программе DAYENUM значения от Sun до Sat представляют собой целые числа в диапазоне 0...6.
Арифметические операции над переменными перечисляемых типов сводятся к операциям над целыми числами. Однако, несмотря на то, что компилятор зна- ет о целочисленной форме представления перечисляемых значений, стоит ис- пользовать этот факт с большой осторожностью. Если вы попробуете выпол- нить присваивание
day1 = 5;
компилятор выдаст предупреждающее сообщение (хотя компиляция произой- дет без ошибок). Рекомендуется там, где возможно, не использовать целочис- ленную интерпретацию перечисляемых значений.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Схожі підручники
- Белая книга (частина 5) (онлайн)
- Продажи и управление продажами Учеб. пособие для вузов (часть 5) (онлайн)
- шпоры ОТВ
- Продажи и управление продажами Учеб. пособие для вузов (часть 2) (онлайн)
- Історія економіки та економічної думки
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн
