Порядок выполнения работы. 1. Определить иерархию классов (в соответствии с вариантом)
1. Определить иерархию классов (в соответствии с вариантом).
2. Определить в классе статическую компоненту - указатель на начало связанного списка объектов и статическую функцию для просмотра списка.
3. Реализовать классы.
4. Написать демонстрационную программу, в которой создаются объекты различных классов и помещаются в список, после чего список просматривается.
5. Сделать соответствующие методы не виртуальными и посмотреть, что будет.
6. Реализовать вариант, когда объект добавляется в список при создании, т.е. в конструкторе (смотри пункт 5 следующего раздела).
Варианты заданий.
Перечень классов:
1) студент, преподаватель, персона, завкафедрой;
2) служащий, персона, рабочий, инженер;
3) рабочий, кадры, инженер, администрация;
4) деталь, механизм, изделие, узел;
5) организация, страховая компания, судостроительная компания, завод;
6) журнал, книга, печатное издание, учебник;
7) тест, экзамен, выпускной экзамен, испытание;
8) место, область, город, мегаполис;
9) игрушка, продукт, товар, молочный продукт;
10) квитанция, накладная, документ, чек;
11) автомобиль, поезд, транспортное средство, экспресс;
12) двигатель, двигатель внутреннего сгорания, дизель, турбореактивный двигатель;
13) республика, монархия, королевство, государство;
14) млекопитающие, парнокопытные, птицы, животное;
15) корабль, пароход, парусник, корвет.
Методические указания.
1. Для определения иерархии классов связать отношением наследования классы, для заданного варианта. Из перечисленных классов выбрать один, который будет стоять во главе иерархии. Это абстрактный класс.
2. Определить в классах все необходимые конструкторы и деструктор.
3. Пример определения статических компонентов:
static person* begin; // указатель на начало списка
static void print(void); // просмотр списка
4. Статическую компоненту-данное инициализировать вне определения класса, в глобальной области.
5. Для добавления объекта в список предусмотреть метод класса, т.е. объект сам добавляет себя в список. Например, a.Add() - объект a добавляет себя в список.
Включение объекта в список можно выполнять при создании объекта, т.е. поместить операторы включения в конструктор. В случае иерархии классов, включение объекта в список должен выполнять только конструктор базового класса. По возможности вы должны продемонстрировать оба этих способа.
6. Список просматривать путем вызова виртуального метода Show каждого объекта.
Содержание отчета.
1. Титульный лист: название дисциплины; номер и наименование работы; фамилия, имя, отчество студента; дата выполнения.
2. Постановка задачи. Следует дать конкретную постановку, т.е. указать, какие классы должны быть реализованы, какие должны быть в них конструкторы, компоненты-функции и т.д.
3. Иерархия классов в виде графа.
4. Определение пользовательских классов с комментариями.
5. Реализация конструкторов с параметрами и деструктора.
6. Реализация методов для добавления объектов в список.
7. Реализация методов для просмотра списка.
8. Листинг демонстрационной программы.
9. Объяснение необходимости виртуальных функций. Следует показать, какие результаты будут в случае виртуальных и не виртуальных функций.
Контрольные вопросы.
1. Как наследуются компоненты с правами доступа public, private и protected в производный класс и структуру?
2. Как устранить неоднозначности при множественном наследовании?
3. Наследование и порядок вызова конструкторов и деструкторов в производном классе.
4. Что такое виртуальные функции, как они описываются и вызывается?
5. Что такое чистые виртуальные функции и абстрактные классы?
6. Какие функции не могут быть виртуальными?
7. Как подавить виртуальность функции?
Лабораторная работа № 14
«ШАБЛОНЫ ФУНКЦИЙ И КЛАССОВ»
Цель. Получить практические навыки создания шаблонов классов и функций и использования их в программах С++. Создать шаблон заданного класса и использовать его для данных различных типов. Создать шаблон функции и использовать его для различных типов данных.