|
Программирование >> Элементы языков с и с++
730 Глава 7 Здесь созданы два экземпляра структуры: один - это массив структур (каждый элемент такого массива представляет собой структуру шаблона man), другой - обычный экземпляр по шаблону man. В языке С++ ключевое слово struct можно опускать; □ при объявлении шаблона: struct man I char name[80]; char phone numbe r[8 0]; int age; int height; }others; Здесь создан один экземпляр структуры - others; □ с помощью квалификатора типа typedef, который изменяет имя шаблона и позволяет воспользоваться новым именем в качестве типа данных: char name[80]; typedef char phone mmiber [80]; int age; int height; }NewTempl; Теперь можно писать: NewTempl dl,d2[20], *p;. Здесь объявлено три переменных типа NewTempl: Экземпляр di структуры шаблона man, массив структур d2 [20] Ир - указатель на структуру. ( Примечание При объявлении шаблона структуры, члены-данные структуры объявляются такого же формата, как если бы они были вне структуры: тип, имя, точка с запятой. Приведем пример вложенной структуры, т. е. такой структуры, которая является членом другой структуры: struct date { int day; день недели int month; номер месяца int year; год Обращение к элементам структур Мы видели, что после объявления структуры (а это фактически тип данного, имя которого равно имени структуры) можно объявить некую переменную типа этой структуры или указатель этого типа (указатель на эту структуру). Если вы объявили переменную типа структуры, то чтобы обратиться к элементам структуры, надо после имени переменной поставить точку, а если вы объявили указатель на структуру, то после имени указателя на данную структуру надо поставить стрелку вправо (->). Затем нужно к этим именам приписать имя члена структуры, к которому надо обратиться. Если требуется обратиться к членам вложенной структуры, то следует продолжить операции с точкой или стрелкой вправо с именем подструктуры, а затем с именем ее члена. Примеры обращения к членам экземпляров структуры: emp[0].name, emp[521].salary, епр[121].hiredate.year char monthname[4]; название месяца }; struct person ( char name [30]; шея char adress[70]; домашний адрес long mailcod; почтовый код float salary; заработная плата struct.date birthdate; дата рождения struct date hiredate; дата поступления на работу }emp[1000],*p; Это типичный пример объявления личной карточки работника (реальная карточка содержит намного больше данных).-Здесь объявлен указатель на структуру и массив структур шаблона person. Если такой массив заполнить, то получим данные на 1000 работников. ( Примечание J Указатель на структуру-это не экземпляр структуры (экземпляр структуры объявляется как етр[]), а указатель, которому в дальнейшем будет присвоен адрес некоторой структуры, с ее элементами можно будет работать через указатель. Допустим, р=&етр [1 ]. В этом случае p->adress - ЭТО адрес работника, который содержится в экземпляре структуры emp[i], а год поступления на работу - р-> hiredate->year. Однако существуют некоторые ограничения: П членом структуры может быть любой тип данных (int, float, массив, структура), но элемент структуры не может иметь тот же тип, что и сама структура. Например: struct г {int s; struct г t); Такое объявление структуры неверно, т. к. t не может иметь тип г. При этом указатель на тот же тип разрешен. Например: struct г {int s; struct г *t}; Такое объявление верно; П в языке С членом структуры не может быть функция, а указатель на функцию может быть членом структуры. Например: struct г int s; (*comp)(char *a,char *b); Такое объявление верно; □ в С++ функция может быть членом структуры. Дело в том, что в С++ структуры рассматриваются как класс, т. е. для членов структуры могут быть определены спецификации доступа к памяти, определяемые для членов класса: public (всегда определена по умолчанию), protected и private (их МЫ рассмотрим при изучении классов). В листинге 7.6 приведен текст простейшей программы, в которой функция является членом структуры (результат работы этой профаммы показан на рис. 7.6); Листинг 7.6 26.СРР : Defines the entry point for the console application. #include stdafx.h ttinclude <stdio.h> ttinclude <conio.h>
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |