Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Переменные с изменяемой структурой



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

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

enum figure_type { CIRCLE,

BOX,

TRIANGLE };

struct figure {

double area,perimetr; /* общие компоненты */

figure_type type; /* признак компонента */

union /* перечисление компонент */

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

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

double b[3]; /* треугольник */

} geom_fig;

} fig1, fig2;

В общем случае каждый объект типа figure будет состоять из трех компонентов: area, perimetr, type. Компонент type называется меткой активного компонента, так как он используется для указания, какой из компонентов объединения geom_fig является активным в данный момент. Такая структура называется переменной структурой, потому что ее компоненты меняются в зависимости от значения метки активного компонента (значение type).

В этом случае компилятор СИ предупредит программиста о потенциально ошибочных присвоениях, таких, например, как

figure.type = 40;

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

struct { общие компоненты;

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

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

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

:::

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

} идентификатор-объединения;

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

Обращаться к компонентам переменной структуры можно с использованием оператора switch:

swith (fig1.type)

{

case CIRCLE: …………………………………;

case BOX: …………………………………;

case TRIANGLE: …………………………………;

}





Дата публикования: 2015-01-13; Прочитано: 202 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...