
Лабораторная работа №15
Обзор языка С++. Структуры
Цель работы: научиться создавать и использовать структуры при составлении простых программ.
Краткие теоретические сведения
Структуры
Структура (structure) — это набор взаимосвязанных данных, объединенных под общим именем. После описания структуры возможно создание и использование конкретного экземпляра (instance) данной структуры. Элементы структуры называются членами-данными (data member).
Допустим, вам нужно хранить список почтовых адресов. Для этого удобно иметь одну переменную, содержащую все поля типичного адреса. Такую возможность как раз и предоставляет структура. Сначала вам нужно объявить структуру, а затем создать экземпляр этой структуры. Структура описывается с помощью ключевого слова struct:
struct mailingListRecord {
char firstName[20] ;
char lastName[20];
char address[50];
char city[20] ;
char state[4] ;
int zip;
bool aFriend;
bool aFoe;
};
Элементы структуры называются членами-данными (data member). Каждый член структуры должен быть объявлен так же, как и обычная переменная. В этом примере структура содержит пять массивов типа char, один член типа int, и два члена типа bool. Наконец, обратите внимание на точку с запятой после закрывающей фигурной скобки. Она требуется в описаниях классов и структур.
Вы можете создавать экземпляры структуры непосредственно при ее описании. Для этого вставьте имя переменной (или имена нескольких переменных) между закрывающей фигурной скобкой и точкой с запятой
Теперь, когда структура описана, мы можем ее использовать. Сначала нужно создать экземпляр структуры. Это выглядит следующим образом:
mailingListRecord record;
В результате для структуры выделяется память (120 байт) и эта область памяти связывается с переменной, имеющей имя record. Затем можно присваивать значения членам-данным:
strcpy(record.firstName, "Bruce");
strcpy(record.lastName, "Reisdorph") ;
strcpy(record.address, "123 Inspiration Pt.");
strcpy(record.city, "Merced") ;
strcpy(record.state, "CA");
record.zip = 95031;
record.aFfriend = true;
record.aFoe = false;
Здесь вы встретились с новым оператором. Для доступа к членам-данным используется оператор доступа к членам структуры (structure member operator), который представляет собой точку между именем переменной и именем члена структуры. (Если вы забудете добавить этот оператор, то скорее всего компилятор сообщит что-то насчет неопределенного символа.) Оператор доступа позволяет вам обращаться к конкретному члену структуры — как для чтения, так и для изменения его значения.
При желании вы можете инициализировать сразу все члены вновь созданного экземпляра структуры:
mailingListRecord гес = {
"Bruce",
"Reisdorph",
"123 Inspiration Pt.",
"Merced",
"CA",
95031,
true,
false };
Этот способ короче предыдущего, но он не всегда применим в реальных ситуациях. Обычно структура заполняется в результате ввода данных пользователем или чтения их из файла. В этих случаях присваивание значений подобным образом невозможно.
Оператор struct
struct name {
data_member 1;
data_member 2;
…
data_member_n ;
} instance;
Оператор struct описывает группу членов-данных (data_member_l, data_member_2, ..., data_member_n) и присваивает этой группе имя (name). Дополнительно можно создать конкретный экземпляр (instance) описанной структуры.
Массивы структур
Вы можете организовать массив структур точно так же, как и массивы данных типа int, char или long. Объявление и использование такого массива выглядит следующим образом:
mailingListRecord listArray[5] ;
strcpy(listArray[0].firstName, "Chuck");
listArray[4] .aFoe = true;
//и т.д.
Это не намного сложнее, чем использование массива данных любого встроенного типа. Как видите, индексный оператор и оператор доступа к членам структуры используются совместно.