Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Praktikum-S__wofp.pdf
Скачиваний:
166
Добавлен:
11.02.2015
Размер:
22.69 Mб
Скачать

Лабораторная работа № 3 Наследование. Полиморфизм

Лабораторная работа посвящена наследованию как средству повторного использования кода и средству создания множества реализаций одного интерфейса. Рассматриваются: родительский и производный классы, виртуальные и чисто виртуальные функции, абстрактные классы, защищённая область видимости, публичное, защищённое и приватное наследование, множественное наследование, объектный полиморфизм.

165

ОБРАЗЕЦ ОТЧЁТА ПО ЛАБОРАТОРНОЙ РАБОТЕ

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

Задачи

1.Создать классы списков: простой двунаправленный кольцевой.

2.Создать базовый класс «список». Реализовать на базе списка стек и очередь с виртуальными функциями вставки и извлечения элементов.

3.Литера строка текст (местоположение на экране, цвет символов, перевод символов из нижнего регистра в верхний, перенос текста по заданной длине строки).

4.Персона: школьник студент аспирант преподаватель.

5.Точка окружность окружность с текстом внутри (нарисовать, стереть, передвинуть, изменить радиус).

6.Создать абстрактный базовый класс с виртуальной функцией - сумма прогрессии. Создать производные классы: «арифметическая прогрессия» и «геометрическая прогрессия». Каждый класс имеет два поля типа double. Первое - первый член прогрессии, второе (double) - постоянная разность (для арифметической) и постоянное отношение (для геометрической). Определить функцию вычисления суммы, где параметром является количество элементов прогрессии.

Арифметическая прогрессия aj=a0+jd, j=0,1,2,…

Сумма арифметической прогрессии: sn=(n+1)(a0+an)/2 Геометрическая прогрессия: aj=a0rj, j=0,1,2,…

Сумма геометрической прогрессии: sn=(a0-anr)/(1-r).

7.Создать класс «точка», содержащий её координаты на плоскости, классы «эллипс» и «окружность». Определить иерархию классов. Определить: конструкторы, деструкторы, функции-члены классов, осуществляющие вычисление периметров и площадей фигур и печать вычисляемых значений.

8.Создать класс «двигатель», имеющий мощность. Определить конструкторы и метод доступа. Создать класс «автомашины», содержащий класс «двигатель». Дополнительно есть марка (указатель на

194

строку) и стоимость. Определить конструкторы и деструктор. Определить public-производный класс «грузовик», имеющий грузоподъемность и тип кузова. Определить конструкторы, деструктор и функцию печати.

9.Создать иерархию классов «образование» и «высшее образование». Переопределить вывод в поток и ввод из потока, конструктор копирования, оператор присваивания через соответствующие функции базового класса.

10.Точка отрезок треугольник (нарисовать, стереть, закрасить, передвинуть, повернуть).

11.Создать класс «комната», имеющий площадь. Определить конструктор и метод доступа. Создать класс «однокомнатная квартира», содержащий комнату и кухню (её площадь), этаж (комната содержится в классе «однокомнатная квартира»). Определить конструкторы, методы доступа. Определить public-производный класс однокомнатных квартир разных городов (дополнительный параметр - название города). Определить конструкторы, деструктор и функцию печати.

12.Окно: стековое многослойное всплывающее.

13.Создать класс «студент», имеющий: имя (указатель на строку), курс и номер зачётной книжки. Определить конструкторы, деструктор и функцию печати. Создать public-производный класс – «студентдипломник», имеющий тему диплома. Определить конструкторы по умолчанию и с разным числом параметров, деструктор, функцию печати. Определить функции переназначения названия диплома и номера зачётной книжки.

14.Создать класс «животное», имеющий классификацию (указатель на строку), ареал обитания, число конечностей, число потомков. Определить конструкторы, деструктор и функцию печати. Создать public-производный класс – «домашнее животное», имеющий кличку.

195

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

15.Создать абстрактный класс с виртуальной функцией - норма. Создать производные классы: «комплексные числа», «вектор из 10 элементов», «матрица (2х2)». Определить функцию нормы - для комплексных чисел - модуль в квадрате, для вектора - корень квадратный из суммы элементов по модулю, для матрицы - максимальное значение по модулю.

16.Создать абстрактный класс «кривые» для вычисления координаты y при некотором значении x. Создать производные классы: «прямая», «эллипс», «гипербола» со своими функциями вычисления y в зависимости от входного параметра x.

Уравнение прямой: y=ax+b , эллипса: x2/a2+y2/b2=1, гиперболы: x2/a2- y2/b2=1.

17.Создать класс «автомобиль», имеющий марку (указатель на строку), число цилиндров двигателя, мощность. Определить конструкторы, деструктор и функцию печати. Создать public-производный класс – «грузовики», имеющий грузоподъемность и тип кузова. Определить конструкторы по умолчанию и с разным числом параметров, деструкторы, функцию печати. Определить функции переназначения марки и грузоподъемности.

18.Создать базовый класс – «работник» и производные классы – «служащий

с почасовой оплатой», «служащий в штате» и «служащий с процентной ставкой». Определить функцию начисления зарплаты.

19.Используя иерархию и композицию классов, создать класс «бинарное дерево». Обеспечить возможность добавления/удаления узлов и поддеревьев, последовательного обхода, бинарного поиска в дереве.

20.Создать абстрактный базовый класс с виртуальной функцией - площадь поверхности. Создать производные классы: «параллелепипед»,

196

«тетраэдр», «шар» со своими функциями-членами площади поверхности. Для проверки определить массив ссылок на абстрактный класс, которым присваиваются адреса различных объектов.

21.Создать иерархию классов «мебель» и «стол». Переопределить вывод в поток и ввод из потока, конструктор копирования, оператор присваивания через соответствующие функции базового класса.

22.Создать базовый класс «отец», у которого есть фамилия, определить виртуальную функцию печати. Создать производный класс «ребёнок», у которого функция печати дополнительно выводит имя. Создать производный класс от последнего класса – «внук», у которого есть отчество, реализовать при этом свою функцию печати.

23.Точка отрезок квадрат прямоугольник ромб параллелограмм (нарисовать, стереть, закрасить, передвинуть, повернуть).

24.Создать абстрактный базовый класс с виртуальной функцией - площадь. Создать производные классы: «прямоугольник», «круг», «прямоугольный треугольник», «трапеция» со своими функциями площади. Для проверки определить массив ссылок на абстрактный класс, которым присваиваются адреса различных объектов.

25.Создать класс «процессор», имеющий частоту (МГц). Определить конструкторы и методы доступа к полям класса. Создать класс «компьютер» (содержащий класс «процессор»), имеющий дополнительно марку (указатель на строку) и стоимость. Определить private-, public- производный класс «компьютер с монитором», имеющий дополнительное поле - размер монитора. Определить конструкторы, деструктор и функцию печати.

26.Создать класс «хвост», имеющий длину. Определить конструкторы и метод доступа. Создать класс «собаки», содержащий класс «хвост» и дополнительно включающий окрас (указатель на строку) и возраст. Определить конструкторы и деструктор. Определить public-производный

197

класс «собака», имеющий дополнительно кличку (указатель на строку). Определить конструкторы, деструктор и функцию печати.

27.Точка отрезок выпуклый четырёхугольник трапеция (нарисовать, стереть, закрасить, передвинуть, повернуть).

28.Создать иерархию классов «корабль», «пассажирский транспорт» и «пассажирский корабль». Классы должны содержать конструкторы, включая конструктор копирования, виртуальные деструкторы, перегружаемые функции ввода и вывода в поток.

29.Создать базовый класс «фигура», и производные классы «круг», «прямоугольник», «трапеция». Определить виртуальные функции «площадь», «периметр» и «печать».

30.Создать классы «карта» и, используя композицию, «колода карт». Конструкторы колоды должны инициализировать колоду упорядоченно и случайным образом. Создать производный класс от «колода карт» – «пасьянс», в котором выбираются по три карты, если две крайние карты одного цвета, то их отбрасывают. Перебор всей колоды карт осуществляется три раза.

31.Создать абстрактный класс «млекопитающие». Определить производные классы «животные» и «люди». У животных определить производные классы «обезьяны» и «лошади». Определить виртуальные функции для описания (идентификации) животных и людей.

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

33.Создать класс «карта», имеющий ранг и масть. Карту можно перевернуть и открыть. Создать класс «колода карт», содержащий карты. Создать два производных класса от колоды карт, в одном карты могут извлекаться

198

только по порядку, в другом - произвольно.

34.Создать иерархию классов «вектор» и «безопасный вектор» с проверкой выхода за границы их предельных значений. Безопасный вектор определяется переменными, содержащими его нижний и верхний пределы. Переопределить вывод в поток и ввод из потока, конструктор копирования, оператор присваивания через соответствующие функции базового класса.

35.Создать иерархию классов «студент», «отец семейства» и «студент-отец семейства». Классы должны содержать конструкторы, включая конструктор копирования, виртуальные деструкторы, перегруженные функции ввода и вывода в поток.

199