- •Тема 6. Определяемые пользователем типы: структуры, объединения и поля
- •6.1. Перечисления
- •Void main()
- •6.2. Структуры
- •Int date, code;
- •Int date, code;
- •Int date, code;
- •Int month;
- •Int year;
- •Void main ()
- •Int year;}; // Год.
- •Void main()
- •Void NamePrint(Name a)
- •Void NameInput(Name *a)
- •Void main()
- •Void NamePrint(Name a)
- •Void NameInput(Name *a, int n)
- •Void main()
- •6.2 Битовые поля
- •Void main()
- •6.3. Объединения
- •Void main ()
Тема 6. Определяемые пользователем типы: структуры, объединения и поля
6.1. Перечисления
Перечисления – это набор именованных целочисленных констант. Перечисление задает конечное множество возможных значений, которые могут получать объекты перечисления. Вот формальное определение синтаксиса перечислений:
enum [имя_типа_перечисления] {список_перечислений} [список_переменных];
Как имя_типа_перечисления, так и список_переменных необязательны, но один из них обязательно должен присутствовать. Список_перечислений – это разделенный запятыми список идентификаторов. Имя_типа_перечисления используется для объявления переменных данного типа. В перечислениях каждому элементу ставится в соответствие целочисленное значение и поэтому перечисления можно использовать в любых выражениях. Например:
Если явно не проводить инициализацию, значение первого символа перечисления будет 0, второго – 1 и так далее.
Можно определить значения одного или нескольких символов, используя инициализатор. Это делается путем помещения за символом знака равенства целочисленного значения. При использовании инициализатора, символы, следующие за инициализационным значением, получают значение большее, чем указанное перед этим.
Пример:
#include <iostream.h>
#include <windows.h>
char bufRus[256];
char* Rus(const char* text){
CharToOem(text, bufRus);
return bufRus;}
Void main()
{
enum week {monday, tuesday, wedday, thursday, friday, saturday, sunday} day;
week tomorrow;
day=tuesday;
cout << day << endl;
if (day==1) cout << Rus("Сегодня вторник") << endl;
tomorrow=++day;
if (tomorrow==wedday) cout << Rus("Завтра среда") << endl;
system("pause");
}
Использование элементов перечисления должно подчиняться следующим правилам:
1. Переменная может содержать повторяющиеся значения.
2. Идентификаторы в списке перечисления должны быть отличны от всех других идентификаторов в той же области видимости, включая имена обычных переменных и идентификаторы из других списков перечислений.
3. Имена типов перечислений должны быть отличны от других имен типов перечислений и структур в этой же области видимости.
4. Невозможен прямой ввод или вывод символов перечислений.
6.2. Структуры
Структура - определенный тип, представляющий собой поименованную совокупность компонент (элементов, полей структуры). В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов.
Дополнительно, элементы структуры могут быть битовыми полями, которые другим способом недоступны.
В C++ структуры рассматриваются как класс. Это означает, что для компонент структуры могут быть определены спецификации доступа: public (по умолчанию), private и protected.
Структуры описываются с помощью ключевого слова struct:
struct [ имя_типа ]
{тип_1 элемент_1;
тип_2 элемент_2;
...
тип_n элемент_n;}
[ список_описателей ];
Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры. Если отсутствует имя типа, должен быть указан список описателей переменных, указателей или массивов. В этом случае описание структуры служит определением элементов этого списка:
struct
{
char Surname [25]:
или char* Surname;
