Понедельник, Июль 5th, 2010

Шпоры по С++

Определение структурного типа может быть совмещено с определением конкретных структур этого типа:
struct PRIM {char *name; long sum; } A, B, C;
Здесь определен структурный тип с именем PRIM и три структуры A, B, C, имеющие одинаковое внутреннее строение. Так как имя структурного типа обладает всеми правами имен типов, то разрешено определять указатели на структуры:
имя_структурного_типа *имя_указателя_на_структуру;
Как обычно, определяемый указатель может быть инициализирован. Значением каждого указателя на структуру может быть адрес структуры того же типа, т. е., грубо говоря, номер байта, начиная с которого структура размещается в памяти. Структурный тип задает ее размеры и тем самым определяет, на какую величину (на сколько байтов) изменится значение указателя на структуру, если к нему прибавить 1.
Например, после определений структурного типа card и структуры rec2 можно так записать определение указателя на структуру типа card:
card *ptrcard = &rec2;
Здесь определен указатель ptrcard и ему с помощью инициализации присвоено значение адреса одной из конкретных структур типа card. После определения такого указателя появляется еще одна возможность доступа к элементам структуры rec2. Ее обеспечивает операция ‘->‘ доступа к элементу структуры, с которой в этот момент связан указатель. Формат соответствующего выражения таков:
имя_указателя -> имя_элемента_структуры
ptrcard -> pages
Вторая возможность обращения к элементу структуры с помощью адресующего ее указателя — это разыменование указателя и формирование уточненного имени такого вида:
(*имя_указателя) .имя_элемента_структуры
Т.е. следующие три выражения эквивалентны:
(*ptrcard) .pages
ptrcard -> pages
rec2 .pages
Все они имеют один и тот же элемент int pages конкретной структуры rec2, имеющей тип card. Как и для других объектов, для структур могут быть определены ссылки:
имя_структурного_типа& имя_ссылки_на_структуру_инициализатор; Например, для введенного выше структурного типа PRIM можно таким образом ввести ссылки на структуры A, B:
PRIM& refA = A;
PRIM& refB (B);
После таких определений refA есть синоним имени структуры А, refB есть другое имя для структуры В. Теперь возможны, например, такие обращения: A .sum эквивалентно refA.sum; *B .name эквивалентно *refB .name; A .name эквивалентно refA.name.
Спроектируем простейшую базу данных, построив ее в виде двухсвязного списка структур (рис. 4), каждая из которых имеет такой формат:
struct record
{ card book; // Структура с данными о книге
record *prior;// На предыдущий элемент списка
record *next;// На следующий элемент списка
};

Структурный тип record предусматривает, что в каждую структуру входят три элемента: структура типа card и два указателя на структуры типа record. Предполагается, что до определения структурного типа record уже определен структурный тип card.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Категория: Шпоры