Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №15.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
64.51 Кб
Скачать

Лабораторная работа №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;

//и т.д.

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