Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Очень часто некоторые объекты программы относятся к одному и тому же классу, отличаясь лишь некоторыми деталями. Рассмотрим, например, представление геометрических фигур. Общая информация о фигурах может включать такие элементы, как площадь, периметр. Однако соответствующая информация о геометрических размерах может оказаться различной в зависимости от их формы.
Рассмотрим пример, в котором информация о геометрических фигурах представляется на основе комбинированного использования структуры и объединения.
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!