Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНТРОЛЬНАЯ_РАБОТА_Лабораторный практикум Алгор...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
521 Кб
Скачать
☆

Объединения

Объединение позволяет в разные моменты времени хранить в одном объекте'значения различного типа. В процессе объявления объединения с ним ассоциируется набор типов значений, которые могут храниться в данном объединении. В каждый момент времени объединение может хранить значение только одного типа из набора. Контроль за тем, какого типа значение хранится в данный момент времени в объединении, возлагается на программиста. Как и для структуры объявление объединения может имеет две формы:

union[<тег>]{<список элементов>}[<описатель>][,...]; union <тег> <описатель>[,...];

Объявление объединения специфицирует его имя и совокупность объявлений переменных, называемых элементами объединения, которые могут иметь различные типы. Память, которая выделяется переменной типа объединение, определяется размером наиболее длинного из элементов объединения. Все элементы объединения размещаются в одной и той же области памяти с одного и того же адреса. Значение текущего элемента объединения теряется, когда другому элементу объединения присваивается значение.

Union

{ int a;

char b[5];

float с;} x;

Если в текущий момент времени активно поле а, то память будет выглядеть так :

а незанятое пространство

Обращение к элементам объединения аналогично обращению к элементам структуры; х.а х.с

Переменные структуры

Объекты программы, которые относятся к одному классу и различаются лишь деталями можно реализовать с помощью переменных структур. Переменные структуры используют комбинацию структуры и объединения. Переменные структуры состоят из трех частей:

набора общих компонентов,

метки активного компонента,

части с меняющимися компонентами.

Общий вид переменной структуры выглядит следующим образом:

struct <тег> { <список объявлений общих элементов>;

<объявление метки активного компонента union

{

<компонента 1>;

<компонента 2>;

….

<компонента n>;

} <идентификатор объединения:»;

} [<описатель>];

Метка активного компонента - это некоторая переменная целого типа, запоминающая номер компонента объединения, который в данный момент является активным.

Перед присваиванием значения одному из компонентов соответствующее значение присваиваетс и метке активного компонента.

Перед обращением к компоненту объединения необходимо проверить, является ли этот компонент активным.

struct adress {

char name{20]; char land [20];

int pr;

union {

char city[20];

srtuct {

char obl[20];

char ra [20];

char contry[20];}cont;

}type;

char street[20]; int number;

) x;

В данном примере переменная х является структурой с постоянными полями имени, страны. Для определения в городе или деревне живет адресат введен признак рг : рг=0 - в городе, рг=1 • в деревне. Объединение type первым элементом будет хранить название города, а вторым элементом - структуру, определяющую положение деревни - область, район, наименование деревни. Кроме всего прочего структура имеет еще два постоянных поля - имя улицы и номер дома.

Обращение к полям такой структуры будет следующим:

x.name

x.land

х.рг

x.type.city

x.type.

cont.obl.type.

cont.ra

x.type.

contxontry

x.street

х.number