Void WriteColor (тип_Спектр C )
Красный, оранжевый, желтый, зеленый, голубой, синий, фиолетовый
Перечисления
Short Swap ( short I)
Анонимные объединения
Short Swap ( short I)
{
union t_U {
short i;
char c [2];
} u;
u.i = I;
char ch = u.c [0];
u.c [0] = u.c [1];
u.c [1] = ch;
return u.i;
}
cout << Swap (1234) << endl; //На экране-11772
Переменная u из этой функции интерпретируется в памяти так:
c[0] (char – 1 байт) |
i (short – 2 байта) |
u |
c[1] (char – 1 байт) |
Имеется специальный вид объединений – анонимные объединения. Анонимные объединения объявляются без указания имени типа:
union {
short i;
char c [2];
};
Создавать переменные такого типа нельзя. Анонимные объединения позволяют обращаться к своим полям как к обычным переменным – без применения оператора “точка”. Они просто указывают на то, что переменные, соответствующие их полям, разделяют одну и ту же память.
Функция Swap с использованием анонимного объединения выглядит так:
{
union {
short i;
char c [2];
};
i = I;
char ch = c [0];
c [0] = c [1];
c [1] = ch;
return i;
}
Перечисления (enumeration) служат для определения пользовательских типов данных, значения которых принадлежат одному из элементов в некотором списке именованных целочисленных констант. Перечисление задается ключевым словом enum:
enum тип_Спектр {
} Цвет1, Цвет2;
Новый пользовательский тип данных тип_Спектр определяет список именованных целочисленных констант (этот список находится внутри фигурных скобок {}). Значениями переменных Цвет1иЦвет2 могут быть только те значения, имена которых перечислены в определении этого типа данных. Переменной этого типа может быть присвоено любое из перечисленных имен:
Цвет1 = желтый;
Цвет2 = синий;
Каждое имя в списке представляет собой некоторое целое значение. По умолчанию целые значения констант перечисления начинаются с 0 и последовательно увеличиваются на единицу:
for ( Цвет1 = красный; Цвет1 <= фиолетовый; Цвет1 = тип_Спектр( Цвет1 + 1 ) )
cout << Цвет1 << endl;
Этот фрагмент программы выведет на экран целые значения от 0 до 6.
При вводе-выводе значений этих типов данных используются именно числовые значения констант, а не их имена. Если необходимо вывести значение перечисления в виде его имени, а не числового значения, необходимо реализовать это программно, например, написав функцию (вывод данных):
{
switch (C)
{
case красный: cout << "красный"; break;
case оранжевый: cout << "оранжевый"; break;
case желтый: cout << "желтый"; break;
case зеленый: cout << "зеленый"; break;
case голубой: cout << "голубой"; break;
case синий: cout << "синий"; break;
case фиолетовый: cout << "фиолетовый"; break;
default: cout << "Неправильный цвет\n";
}
}
Числовые значения констант перечисления можно изменять, например, так:
enum тип_Спектр {
красный, оранжевый, желтый = 10, зеленый, голубой, синий, фиолетовый
};
После такого переопределения числового значения константы желтый, числовые значения всех констант будут следующими:
красный | оранжевый | желтый | зеленый | голубой | синий | фиолетовый |
Перечисления обычно используются для того, чтобы сделать тексты программ более понятными, и как следствие, избавиться от дополнительных возможных ошибок.