Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
умп_oop_1.doc
Скачиваний:
14
Добавлен:
22.03.2015
Размер:
162.3 Кб
Скачать

Контрольные вопросы

  1. Что такое массив? Сформулируйте правила индексирования и инициализации массива.

  2. Каким образом создается динамический массив? В чем различия между указателями массивов?

  3. Опишите механизм передачи массива функциям.

  4. Покажите взаимосвязь между массивами, указателями и ссылками.

  5. Что означает «выход за границы массива», к чему это может привести?

  6. В чем заключаются особенности работы со строками?

  7. Каким образом осуществляется управление свободной памятью?

Раздел III

ОБРАБОТКА СТРУКТУРИРОВАННЫХ

ТИПОВ ДАННЫХ

Цель работы:изучить способы определения структур, правила инициализации и доступа к элементам структур; приобрести практические навыки передачи структур функциям; изучить способы создания динамических структур данных, особенности работы с объединениями.

Основные теоретические положения

  1. Определение структур

Структура (struct) – это агрегатный тип, содержащий компоненты данных разных типов и позволяющий описывать сложные модели данных.

Доступ к компонентам осуществляется с помощью оператора выбора элемента структуры «.» или посредством оператора указателя структуры «→».

Синтаксис объявления структурированного типа обобщенно имеет вид:

struct имя_типа {тип_1 элемент_1;

тип_2 элемент_2;

………………….

тип_n элемент_n;

};

Н а п р и м е р :

struct type {char name[50]; // наименование

int id_n; // идентификационный номер

};

После этого тип type может быть использован в программе для объявления переменных:

type a, *p;

  1. Инициализация структур

Инициализация структур осуществляется через доступ к элементам структурных переменных:

strcpy (a.name, “Наименование_1”); // инициализация

a.id_n =101; // переменной а

p = new type; // инициализация указателя p

strcpy (p→name, “Наименование_2”); // инициализация

p→id_n = 102; // области памяти, адресуемой через p

  1. Передача структур функциям

Структурные переменные могут передаваться функциям как по значению, так и по ссылке. Например, при печати содержимое переменных a и *p может иметь следующие определение и вызов:

void print (type d) // print (a);

{cout<<d.name<<endl; // print (*p);

cout<<d.id_n<<endl;

}

Однако передача структур по значению требует создания локальной копии структурной переменной при вызове функции и может быть проблематичной, в случае если элементы структуры являются указателями:

struct type {char *name; int id_n;} b;

Так, при передаче переменной b компилятор выделит память только под указатель name, для информации, адресуемой через name, память не выделяется.

Более предпочтительной для структур является передача параметров по ссылке:

void print (const type& d) // print(a);

{ ----------------------------------}

В этом случае, чтобы функция не могла изменить содержимое по адресу передаваемой переменной, используется const.

  1. Объединения

Объединение (union) – это производный от структур тип, элементы которого совместно используют память так, что их значения перекрываются.

Н а п р и м е р : union type {int n;

double y;} x = {10};

Здесь x - переменная типа union type, инициализируемая значением 10, которое присваивается первому элементу n.

Память, выделяемая для переменной x, будет общая как для элемента n, так и для элемента y. Поэтому x может использоваться или как целая переменная, или как переменная с двойной точностью.

  1. Динамические структуры данных

Синтаксис языка С++ допускает определение структуры с элементами, которые являются указателями на тип самой структуры. Это позволяет создавать динамические типы с произвольным числом таких структур, связанных вместе.

Н а п р и м е р : struct type_list {

type data;

type_list * next;} *list_1;

list_1= new type_list;

1 2 3

list_→ datа data data

next next next = 0

Здесь list_1 – указатель на начало списка; data – данные типа type; next – адрес следующего элемента типа type_list или 0.

Через указатель на начало списков осуществляется доступ к данным, хранящимся в элементах.