Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Структуры и объединения





Наряду с массивами в C++ имеются данные типа структур и объединений.

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

struct идентификатор { деклараторы членов }

деклараторы-инициализаторы;

Такое объявление выполняет две функции: во-первых, объяв­ляется структурный тип; во-вторых, объявляются переменные этого типа.

Идентификатор после ключевого слова struct является име­нем структурного типа. Имя типа может отсутствовать, тогда тип будет безымянный и в других частях программы нельзя будет объявлять данные этого типа.

Деклараторы-инициализаторыобъявляют конкретные переменные структурного типа (т.е. данные описанного типа, ука­затели на этот тип и массивы данных). Деклараторы-инициализаторымогут отсутствовать, в этом случае объяв­ление описывает только тип структуры.

Например, структура, описывающая точку на плоскости, может быть определена так:

struct Point_strct // Имя структуры

{ int х, у; } // Деклараторы членов структуры

pointN, *ptr_to_point, arraypoint[ 3 ];

// Данные структурного типа

Члены (компоненты) структуры описываются аналогично дан­ным соответствующего типа и могут быть скалярными данными, указателями, массивами или данными другого структурного типа. Например, для описания прямоугольника со сторонами, парал­лельными осям координат, можно предложить несколько вариан­тов:

struct RectN1{

Point p1; // Координаты левого верхнего угла

Point p2; // Координаты правого нижнего угла

};

struct RectN2 {

Point p[2];

};

struct RectN3{

Point p; // Левый верхний угол

int width; // Ширина

int high; // Высота прямоугольника

};

Поскольку при описании членов структуры должны использо­ваться только ранее определенные имена типов, предусмотрен вариант предварительного объявления структуры, задающий толь­ко имя структурного типа. Например, чтобы описать элемент дво­ичного дерева, включающий указатели на левую и правую ветви дерева и указатель на некоторую структуру типа ValueD, содер­жащую значение данного в узле, можно определить следующие структуры:

struct ValueD;

struct Tree_element {

ValueD *val;

Tree_element *left, *right;

};

Членами структур могут быть битовые поля, когда в поле па­мяти переменной целого типа (int или unsigned int) разме­щается несколько целых данных меньшей длины. Пусть, напри­мер, в некоторой программе синтаксического разбора описание лексемы содержит ее тип (до шести значений) и порядковый но­мер лексемы в таблице соответствующего типа (до 2000 значе­ний). Для представления значения типа лексемы достаточно трех двоичных разрядов (трех бит), а для представления чисел от 0 до 2000 – 11 двоичных разрядов (11 бит).

Описание структуры, со­держащей сведения о лексеме:

struct Lxm {

unsigned int type_lex: 3;

unsigned int num_lex: 11;

};

Двоеточие с целым числом после имени члена структуры ука­зывает на битовое поле, целое число на размер поля в битах

Объединение - это структура, все компонен­ты которой размещаются в памяти с одного и того же адреса.

Та­ким образом, объединение в каждый момент времени содержит один из возможных вариантов значений. Для размещения объеди­нения в памяти выделяется участок, достаточный для размещения члена объединения самого большого размера. Применение объединения также позволяет обращаться к одному и тому же полю памяти по разным именам и интерпретировать как значения раз­ных типов. Описание объединения строится по той же схеме, что и описа­ние структуры, но вместо ключевого слова struct используется слово union, например, объединение uword позволяет интерпре­тировать поле памяти либо как unsigned int, либо как массив из двух элементов типа unsigned char.

union uword {

unsigned int u;

unsigned char b[2];

};

Описания типов, объявляемых программистом, в т.ч. структур и объединений, могут быть достаточно большими, по­этому в C++ предусмотрена возможность присваивания типам собственных имен (синонимов), достигая при этом повышения наглядности программных текстов. Синоним имени типа вводится с ключевым словом typedef и строится как обычное объявление, но идентификаторы в деклараторах в этом случае интерпретиру­ются как синонимы описанных типов. Синонимы имен типов при­нято записывать прописными буквами, чтобы отличать их от идентификаторов переменных.

Несколько приме­ров объявления синонимов имен типов:

typedef struct { double re, im } COMPLEX;

typedef int *pINT;

После таких объявлений синоним имени может использоваться как спецификатор типа:

COMPLEX compl, pcompl; //переменная типа

// COMPLEX и указатель на COMPLEX pINT

Описание структур и объединений в основ­ном соответствует их построению в языке Си. В C++ структуры и объединения являются частными случаями объ­ектных типов данных.

 







Дата добавления: 2014-11-12; просмотров: 874. Нарушение авторских прав; Мы поможем в написании вашей работы!




Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Гальванического элемента При контакте двух любых фаз на границе их раздела возникает двойной электрический слой (ДЭС), состоящий из равных по величине, но противоположных по знаку электрических зарядов...

Сущность, виды и функции маркетинга персонала Перснал-маркетинг является новым понятием. В мировой практике маркетинга и управления персоналом он выделился в отдельное направление лишь в начале 90-х гг.XX века...

Разработка товарной и ценовой стратегии фирмы на российском рынке хлебопродуктов В начале 1994 г. английская фирма МОНО совместно с бельгийской ПЮРАТОС приняла решение о начале совместного проекта на российском рынке. Эти фирмы ведут деятельность в сопредельных сферах производства хлебопродуктов. МОНО – крупнейший в Великобритании...

Неисправности автосцепки, с которыми запрещается постановка вагонов в поезд. Причины саморасцепов ЗАПРЕЩАЕТСЯ: постановка в поезда и следование в них вагонов, у которых автосцепное устройство имеет хотя бы одну из следующих неисправностей: - трещину в корпусе автосцепки, излом деталей механизма...

Понятие метода в психологии. Классификация методов психологии и их характеристика Метод – это путь, способ познания, посредством которого познается предмет науки (С...

ЛЕКАРСТВЕННЫЕ ФОРМЫ ДЛЯ ИНЪЕКЦИЙ К лекарственным формам для инъекций относятся водные, спиртовые и масляные растворы, суспензии, эмульсии, ново­галеновые препараты, жидкие органопрепараты и жидкие экс­тракты, а также порошки и таблетки для имплантации...

Studopedia.info - Студопедия - 2014-2025 год . (0.009 сек.) русская версия | украинская версия