Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Определения структур




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

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

Структура - это составной тип данных, построенный с использованием других типов.

Поскольку структура - это тип данных, создаваемый программистом, то именно на него (программиста) возлагается описание вновь создаваемого типа. Этим работа со структурами существенно отличается от работы со стандартными типами данных, которые "понятны" компилятору без всяких описаний.

Структура состоит из полей. Поля (элементы структуры) - переменные или массивы стандартного типа (int, char и т.п) или другие, ранее описанные структуры.

Описанный тип данных можно использовать для объявления переменных типа структур. В программе может быть сколько угодно целых или вещественных переменных. То же верно и для структур - можно объявлять сколько угодно переменных с одной и той же структурой. В одной программе может быть множество разных структур. Из структур можно организовывать массивы.

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

struct [имя] { тип_элемента_1 имя_элемента_1; тип_элемента_2 имя_элемента_2;... тип_элемента_n имя_элемента_n; };

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

struct date { int day, month, year; }; или struct date { int day; int month; int year; };

Элементы структуры могут быть любого типа и одна структура может содержать элементы многих разных типов. Структура не может, однако, содержать экземпляры самой себя. Например, элемент типа date не может быть объявлен в определении структуры date.

struct date { int day; int month; int year; date last_date; // ошибка!};

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

struct date {... } a, b, c; (при этом выделяется соответствующая память под переменные a, b и c).

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

Переменные структуры объявляются так же, как переменные других типов. Например,

date days; или struct date days; (запись в стиле Си)

Теперь переменная days имеет тип date.

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

struct POINT { // объявление структуры POINT int x; // определение элементов структуры x и y int y;} spot = { 20, 40 }; // Переменная spot имеет // значения x = 20, y = 40

Поля структуры могут быть сами структурами, т.е. разрешается вкладывать структуры одна в другую, например:

struct Man { char name [30], fam [20]; struct date bd; int age;};

Здесь name и fam - символьные массивы, соответственно размером 30 и 20 байт. Переменная bd представлена составным элементом типа date, переменная age содержит значения целого типа.

Как видно из спецификации, не обязательно указывать имя структуры. Такое определение структуры называется анонимным. Например,

struct { char abbreviation[8]; char fullname[60];} title;

Часто такие структуры применяются как вложенные структуры. Например,

struct PersonInPhoneBook { struct { char firstname[25]; char Name[15]; char lastname[25]; } name; struct { char country[35]; char town[25]; char street[35]; char home[35]; } address; struct { char code_country[5]; char code_town[5]; char number[7]; } phone;} persons[100];

В С++ разрешено использовать массивы структур. Объявление выше описывает структуру PersonInPhoneBook и массив persons из ста элементов нового типа.

К отдельным частям структуры можно обращаться через составное имя. Формат обращения:

имя_структуры.имя_поля
Чтобы обратиться к отдельному элементу структуры, необходимо указать ее имя, поставить точку и сразу за ней написать имя нужного элемента.

Например,

... int a;... struct date birthday; /*объявление переменной birthday типа date равнозначно объявлению date birthday; */ a = birthday.month; /* переменной a присваивается значение поля month переменной birthday */ birthday.year = 2001; /* полю year переменной birthday присваивается число 2001*/

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

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

Программа
/* программа сложения двух комплексных чисел */#include <iostream.h> void main(){// описание структуры complex struct complex { float re; // действительная часть float im; // мнимая часть }; struct complex a, b, c; // объявление переменных типа complex float temp; // промежуточная переменная cout << "Введите первое слагаемое: " << " действительная часть = "; cin >> temp; a.re = temp; cout << " мнимая часть = "; cin >> temp; a.im = temp; cout << "Введите второе слагаемое: " << " действительная часть = "; cin >> temp; b.re = temp; cout << " мнимая часть = "; cin >> temp; b.im = temp; // складываем действительные части c.re = a.re + b.re;// складываем мнимые части c.im = a.im + b.im; // вывод результатов на экран cout << "Результат сложения = " << c.re << " + " << c.im << "i ";}



Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 779; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.