Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samostoyatelnye_po_S.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
671.74 Кб
Скачать

Робота з обєднаннями

Елементом структури може бути бітове поле, що забезпечує доступ до окремих бітам пам'яті. Поза структур бітові поля оголошувати не можна. Не можна також організовувати масиви бітових полів і не можна застосовувати до полів операцію визначення адреси. У загальному випадку тип структури двійкового полем задається в наступному вигляді:

struct {unsigned ідентифікатор 1: довжина-поля 1;

unsigned ідентифікатор 2: довжина-поля 2;}

довжина - поля задається цілим виразом або константою. Ця константа визначає число бітів, відведений відповідному полю. Поле нульовий довгі позначає вирівнювання на границю наступного слова.

Приклад:

struct {unsigned a1: 1;

unsigned a2: 2;

unsigned a3: 5;

unsigned a4: 2;} prim;

Структури бітових полів можуть містити й знакові компоненти. Такі компоненти автоматично розміщуються на відповідних границях слів, при цьому деякі біти слів можуть залишатися невикористаними.

Посилання на полі бітів виконуються точно так само, як і компоненти загальних структур. Саме ж бітове поле розглядається як ціле число, максимальне значення якого визначається довжиною поля.

Дуже часто деякі об'єкти програми відносяться до одного і того ж класу, відрізняючись лише деякими деталями. Розглянемо, наприклад, уявлення геометричних фігур. Загальна інформація про фігури може включати такі елементи, як площа, периметр. Проте відповідна інформація про геометричних розмірах може виявитися різною в залежності від їх форми.

Розглянемо приклад, в якому інформація про геометричні фігури представляється на основі комбінованого використання структури та об'єднання.

struct figure {

double area, perimetr; / * загальні компоненти * /

int type; / * ознака компонента * /

union / * перерахування компонент * /

{Double radius; / * окружність * /

double a [2]; / * прямокутник * /

double b [3]; / * трикутник * /

} Geom_fig;

} Fig1, fig2;

У загальному випадку кожен об'єкт типу figure буде складатися з трьох компонентів: area, perimetr, type. Компонент type називається міткою активного компонента, так як він використовується для вказівки, який з компонентів об'єднання geom_fig є активним в даний момент. Така структура називається змінною структурою, тому що її компоненти змінюються залежно від значення мітки активного компонента (значення type). Відзначимо, що замість компоненти type типу int, доцільно було б використовувати перераховуються тип. Наприклад, такий

enum figure_chess {CIRCLE,

BOX,

TRIANGLE};

Константи CIRCLE, BOX, TRIANGLE отримають значення відповідно рівні 0, 1, 2. Змінна type може бути оголошена як має Перечіслімий тип:

enum figure_chess type;

У цьому випадку компілятор СІ попередить програміста про потенційно помилкових присвоєння, таких, наприклад, як

figure.type = 40;

У загальному випадку змінна структури буде складатися з трьох частин: набір загальних компонент, мітки активного компонента і частини з мінливими компонентами. Загальна форма змінної структури, має наступний вигляд:

struct {загальні компоненти;

мітка активного компонента;

union {опис компоненти 1;

опис компоненти 2;

:::

опис компоненти n;

} Ідентифікатор-об'єднання;

} Ідентифікатор-структури;

Приклад визначення змінної структури з ім'ям helth_record

struct {/ * загальна інформація * /

char name [25]; / * ім'я * /

int age; / * вік * /

char sex; / * підлогу * /

/ * Мітка активного компонента * /

/ * (Сімейний стан) * /

enum merital_status ins;

/ * Змінна частина * /

union {/ * неодружений * /

/ * Немає компонент * /

struct {/ * перебуває в шлюбі * /

char marripge_date [8];

char spouse_name [25];

int no_children;

} Marriage_info;

/ * Розлучений * /

char date_divorced [8];

} Marital_info;

} Health_record;

enum marital_status {SINGLE, / * неодружений * /

MARRIGO, / * одружений * /

DIVOREED / * розлучений * /

};

Звертатися до компонентів структури можна за допомогою посилань:

helth_record.neme,

helth_record.ins,

helth_record.marriage_info.marriage_date.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]