- •Министерство образования российской федерации
- •Введение
- •Программирование функций
- •Основные теоретические положения
- •Задания
- •Контрольные вопросы
- •Обработка массивов
- •Основные теоретические положения
- •1. Определение массивов
- •2. Массивы и указатели
- •3. Передача массивов функциям
- •Задания
- •Контрольные вопросы
- •Задания
- •Контрольные вопросы
- •Разработка абстрактных типов данных
- •Основные теоретические положения
- •1. Определение классов
- •3. Дружественные функции
- •4. Указатель this
- •5. Статические компонентные данные и компонентные функции static и const
- •6. Изменчивость
- •7. Вложенные классы
- •Задания
- •Контрольные вопросы
- •Раздел V создание и уничтожение объектов класса
- •Основные теоретические положения
- •Задания
- •Контрольные вопросы
- •Рекомендуемая литература
- •Раздел I. Программирование функций 4
Контрольные вопросы
Что такое массив? Сформулируйте правила индексирования и инициализации массива.
Каким образом создается динамический массив? В чем различия между указателями массивов?
Опишите механизм передачи массива функциям.
Покажите взаимосвязь между массивами, указателями и ссылками.
Что означает «выход за границы массива», к чему это может привести?
В чем заключаются особенности работы со строками?
Каким образом осуществляется управление свободной памятью?
Раздел III
ОБРАБОТКА СТРУКТУРИРОВАННЫХ
ТИПОВ ДАННЫХ
Цель работы:изучить способы определения структур, правила инициализации и доступа к элементам структур; приобрести практические навыки передачи структур функциям; изучить способы создания динамических структур данных, особенности работы с объединениями.
Основные теоретические положения
Определение структур
Структура (struct) – это агрегатный тип, содержащий компоненты данных разных типов и позволяющий описывать сложные модели данных.
Доступ к компонентам осуществляется с помощью оператора выбора элемента структуры «.» или посредством оператора указателя структуры «→».
Синтаксис объявления структурированного типа обобщенно имеет вид:
struct имя_типа {тип_1 элемент_1;
тип_2 элемент_2;
………………….
тип_n элемент_n;
};
Н а п р и м е р :
struct type {char name[50]; // наименование
int id_n; // идентификационный номер
};
После этого тип type может быть использован в программе для объявления переменных:
type a, *p;
Инициализация структур
Инициализация структур осуществляется через доступ к элементам структурных переменных:
strcpy (a.name, “Наименование_1”); // инициализация
a.id_n =101; // переменной а
p = new type; // инициализация указателя p
strcpy (p→name, “Наименование_2”); // инициализация
p→id_n = 102; // области памяти, адресуемой через p
Передача структур функциям
Структурные переменные могут передаваться функциям как по значению, так и по ссылке. Например, при печати содержимое переменных 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.
Объединения
Объединение (union) – это производный от структур тип, элементы которого совместно используют память так, что их значения перекрываются.
Н а п р и м е р : union type {int n;
double y;} x = {10};
Здесь x - переменная типа union type, инициализируемая значением 10, которое присваивается первому элементу n.
Память, выделяемая для переменной x, будет общая как для элемента n, так и для элемента y. Поэтому x может использоваться или как целая переменная, или как переменная с двойной точностью.
Динамические структуры данных
Синтаксис языка С++ допускает определение структуры с элементами, которые являются указателями на тип самой структуры. Это позволяет создавать динамические типы с произвольным числом таких структур, связанных вместе.
Н а п р и м е р : 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.
Через указатель на начало списков осуществляется доступ к данным, хранящимся в элементах.