Порядок выполнения работы. 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

 

«ШАБЛОНЫ ФУНКЦИЙ И КЛАССОВ»

 

Цель. Получить практические навыки создания шаблонов классов и функций и использования их в программах С++. Создать шаблон заданного класса и использовать его для данных различных типов. Создать шаблон функции и использовать его для различных типов данных.