ВЛОЖЕННЫЕ СТРУКТУРЫ

ВЛОЖЕННЫЕ СТРУКТУРЫ

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

/* пример вложенной структуры */

#define LEN 20

#define M1   "Спасибо за прекрасный вечер,"

#define M2   "Вы, конечно, правы, что"

#define M3   " -своеобразный парень. Мы должны собраться"

#define М4   " отведать очень вкусный"

#define M5   "и немного повеселиться."

struct names {   /*первый структурный шаблон */

char first[LEN];

char last[LEN], };

struct guy {   /* второй шаблон */

struct names handle; /* вложенная структура */

char favfood[LEN];

char job[LEN];

float income;

};

main( ) {

static struct guy fellow = {  /*инициализация переменной */

{" Франко," " Уотэл"},

" баклажан",

" вязальщик половиков",

15435.00 };

printf("Дорогой %s, ," fellow.handle.first);

printf(" %s %s. ", M1, fellow.handle.first);

printf(" %s %s " , M2, fellow.job);

printf(" %s " , M3);

printf(" %s %s %s ", M4, fellow.favfood, M5);

printf(" %40s %s ", "   " , " До скорой встречи" );

printf(" %40s %s ", "    ", Шалала");

}

РИС. 14.4. Программа вложенной структуры.

Вот результат работы программы:

Дорогой Франко,

     Спасибо за прекрасный вечер, Франко.

Bы, конечно, правы. что вязальщик половиков - своеобразный парень.

Мы должны собраться отведать очень вкусный баклажан и немного повеселиться.

                                                          До скорой встречи,

                                                          Шалала

Во-первых, следует рассказать о том, как поместить вложенную структуру в шаблон. Она просто описывается точно так же, как это делалось бы для переменной типа int:

struct names handle;

Это означает, что handle является переменной типа struct names. Конечно, файл должен также содержать шаблон для структуры типа names.

Во-вторых, следует рассказать, как мы получаем доступ к элементу вложенной структуры. Нужно дважды использовать операцию "." :

fellow.handle.first = = " Франко";

Мы интерпретируем эту конструкцию, перемещаясь слева направо;

(fellow.handle).first

То есть первым находим элемент fellow, далее элемент handle структуры fellow, а затем его элемент first. Теперь рассмотрим указатели.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

5.4.3 Вложенные Классы

Из книги C++ автора Хилл Мюррей

5.4.3 Вложенные Классы Описание класса может быть вложенным. Например:class set (* struct setmem (* int mem; setmem* next; setmem(int m, setmem* n) (* mem=m; next=n; *) *); setmem* first; public: set() (* first=0; *) insert(int m) (* first = new setmem(m,first);*) // ... *);Если только вложенный класс не является очень простым, в таком описании трудно разобраться.


5.4.3 Вложенные Классы

Из книги Справочное руководство по C++ автора Страустрап Бьярн

5.4.3 Вложенные Классы Описание класса может быть вложенным. Например:class set (* struct setmem (* int mem; setmem* next; setmem(int m, setmem* n) (* mem=m; next=n; *) *); setmem* first; public: set() (* first=0; *) insert(int m) (* first = new setmem(m,first);*) // ... *);Если только вложенный класс не является очень простым, в таком описании трудно разобраться.


8.5.15 Вложенные Классы

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

8.5.15 Вложенные Классы Класс может быть описан внутри другого класса. Это, онако, лишь соглашение о записи, поскольку внутренний класс принадлежит охватывающей области видимости. Например:int x;class enclose (* // охватывающий int x; class inner (* // внутренний int y; void f(int); *); int g(inner*); *);inner a; void


Вложенные пространства имен

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Вложенные пространства имен Совершенствуя организацию своих типов, вы имеете возможность определить пространства имен в рамках других пространств имен. Библиотеки базовых классов .NET часто используют такие вложений, чтобы обеспечить более высокий уровень организации


11.2.3. Вложенные классы и модули

Из книги VBA для чайников автора Каммингс Стив

11.2.3. Вложенные классы и модули Классы и модули можно вкладывать друг в друга произвольным образом. Программисты, приступающие к изучению Ruby, могут этого и не знать.Основная цель данного механизма — упростить управление пространствами имен. Скажем, в класс File вложен класс


Вложенные наборы

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид


Вложенные транзакции

Из книги C++ для начинающих автора Липпман Стенли

Вложенные транзакции В Firebird транзакции всегда запускаются и завершаются клиентом. Некоторые другие СУБД могут запускать и подтверждать транзакции из хранимых процедур, потому что для управления транзакциями они используют двухфазную блокировку транзакций. Вместо


10.2. Вложенные циклы

Из книги автора

10.2. Вложенные циклы Цикл называется вложенным, если он размещается внутри другого цикла. На первом проходе, внешний цикл вызывает внутренний, который исполняется до своего завершения, после чего управление передается в тело внешнего цикла. На втором проходе внешний цикл


ВЛОЖЕННЫЕ ЦИКЛЫ

Из книги автора

ВЛОЖЕННЫЕ ЦИКЛЫ      Вложенным называется цикл, находящийся внутри другого цикла. В этом разделе рассматривается пример, в котором вложенные циклы используются для нахождения всех простых чисел, не превышающих данного значения. Простое число - это такое число, которое


18.5.11. Вложенные циклы for

Из книги автора

18.5.11. Вложенные циклы for Чтобы вложить, циклы, достаточно цикл for поместить в другой цикл:for имя_переменной in listdofor имя_переменной2 in list2doкоманда1done doneВ следующем сценарии представлен вложенный цикл for. Имеются два списка, APPS и SCRIPTS, первый из которых содержит путь к


13.10. Вложенные классы A

Из книги автора

13.10. Вложенные классы A Класс, объявленный внутри другого класса, называется вложенным. Он является членом объемлющего класса, а его определение может находиться в любой из секций public, private или protected объемлющего класса.Имя вложенного класса известно в области видимости