- •Министерство образования и науки Республики Казахстан
- •Кафедра программного обеспечения
- •Языки программирования
- •Лабораторная работа № 1
- •Краткая теория
- •Задания
- •Лабораторная работа № 2
- •Краткая теория
- •Лабораторная работа №3
- •Краткая теория
- •Задания
- •Задания
- •Лабораторная работа № 4
- •Краткая теория
- •Задания
- •Лабораторная работа № 5
- •Краткая теория
- •Задания
- •Лабораторная работа № 6
- •Краткая теория
- •Объединения
- •Задания
- •Лабораторная работа № 7
- •Краткая теория
- •Задания
- •Лабораторная работа № 8
- •Краткая теория
- •Задания
Объединения
Объединение позволяет в разные моменты времени хранить в одном объекте'значения различного типа. В процессе объявления объединения с ним ассоциируется набор типов значений, которые могут храниться в данном объединении. В каждый момент времени объединение может хранить значение только одного типа из набора. Контроль за тем, какого типа значение хранится в данный момент времени в объединении, возлагается на программиста. Как и для структуры объявление объединения может имеет две формы:
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
