close

Вход

Забыли?

вход по аккаунту

?

ТП Лаб №3

код для вставкиСкачать
 Лабораторная работа №3
(расчетное время выполнения работы - 2 занятия)
Цель: изучение виртуальных методов и полиморфизма.
Варианты заданий:
ЗаданиеСтоимость (баллы)1. Создать абстрактный базовый класс уравнения с виртуальной функцией печать корней уравнения. Создать производные классы: линейное уравнение и квадратное уравнение. Определить функцию вычисления корней уравнений. 2. Создать абстрактный базовый класс фигура с виртуальной функцией - печать объёма фигуры. Создать производные классы: параллелепипед, пирамида, тетраэдр, шар со своими функциями печати объема.
3. Создать абстрактный базовый класс фигура с виртуальной функцией - вычисление площади фигуры. Создать производные классы: прямоугольник, круг, прямоугольный треугольник, трапеция со своими функциями вычисления площади. 4. Создать абстрактный базовый класс фигура с виртуальной функцией - печать площади поверхности. Создать производные классы: параллелепипед, тетраэдр, шар со своими функциями печати площади поверхности. 5. Создать абстрактный класс кривая с виртуальной функцией вычисления координаты y для некоторой x. Создать производные классы: прямая, эллипс, гипербола со своими функциями вычисления y в зависимости от входного параметра x. 6. Создать абстрактный класс структура данных с виртуальной функцией: норма. Создать производные классы: комплексные числа, вектор из 10 элементов, матрица (2х2). Определить функцию нормы - для комплексных чисел - модуль в квадрате, для вектора - корень квадратный из суммы элементов по модулю, для матрицы - максимальное значение по модулю.
7. Создать абстрактный базовый класс - Предок, с строковым параметром имя. определить виртуальную функцию печати имени. Создать производный класс Ребенок, у которого функция печати дополнительно к имени предка выводит имя ребёнка. Создать производный класс от последнего класса - Внук, у которого есть отчество. Написать для него свою функцию печати. 8. Создать абстрактный базовый класс - работник и производные классы - служащий с почасовой оплатой, служащий в штате и служащий с процентной ставкой. Определить функцию начисления зарплаты. 9. Создать абстрактный базовый класс фигура с виртуальной функцией - возврат количества углов в фигуре. Создать производные классы: параллелепипед, пирамида, тетраэдр, треугольник со своими функциями. 501. Создать абстрактный базовый класс список. Реализовать на его базе классы стек и очередь с виртуальными функциями добавления и удаления элементов.
2. Создать абстрактный класс объект мироздания. Определить наследуемые классы - лиса, кролик и трава. Лиса может "съесть" кролика. Кролик "ест" траву. Лиса и кролик могут "умереть" - определен их возраст. Кроме этого определен класс - отсутствие жизни. Если в окрестности имеется больше травы, чем кроликов, то трава остается, иначе трава съедена. Если лис слишком старый он может умереть. Если лис слишком много (больше 5 в окрестности), лисы больше не появляются. Если кроликов меньше лис, то лис ест кролика. 3. Поступающие звонки оператор классифицирует (т.е. в какой город, регион, страну и т.д. поступил звонок), заносит соответствующие данные и добавляет запись к абоненту. Необходимо реализовать унифицированные функции подсчета общего времени и стоимости как для абонента (звонящий) так и для всех абонентов, выдать на экран специфическую информацию о вызовах. Для этого реализовать абстрактный базовый класс звонок с виртуальной функцией стоимость, и наследники этого класса входящий звонок и исходящий звонок.
4. Реализовать программу, имитирующую работу автосервиса. Через автосервис проходят машины, требующие различных видов работ. Всего по России существует сеть автосервисов (но не больше 10). Реализовать следующие функции: − Добавление автосервиса (сначала 0)
− Удаление автосервиса (по названию)
Для каждого автосервиса реализовать следующие функции:
− Добавление заявки
− Удаление заявки
− Вывод общей информации (кол-во заявок каждого типа)
− Очистка списка заявок
− Подсчёт выручки за определённый день (сумма цен за заданную дату)
− Вывод всех записей
В данном случае автосервис - класс-итератор, заявка - абстрактный базовый класс, от которого необходимо реализовать не менее 3 наследников.
5. Реализовать программу, имитирующую работу телефонной книги. В неё можно вносить различные записи. Реализовать следующие функции:
− Добавление записи
− Удаление записи
− Полная очистка списка
− Определение, кого больше, М или Ж
− Определение среднего возраста
− Печать полного списка записей
− Сортировка по имени, возрасту
В данном случае телефонная книга - класс-итератор, запись - абстрактный базовый класс, от которого необходимо реализовать не менее 3 наследников.
5. Реализовать программу, имитирующую список товаров магазина бытовой электроники. В неё можно добавлять различные элементы.
Для каждого магазина:
− Добавление товара
− Удаление товара
− Полная очистка списка
− Вывод всех товаров
− Вывод товаров выбранного типа
− Сортировка товаров по дате производства
В данном случае список товаров - класс-итератор, товар - абстрактный базовый класс, от которого необходимо реализовать не менее 3 наследников.
7. Реализовать программу, имитирующую список игр. В неё можно вносить различные игры. Реализовать следующие функции:
− Добавление игры
− Удаление игры
− Полная очистка списка
− Определение, каких игр больше
− Определить, игр какого издателя больше
− Отсортировать игры по имени
− Вывод списка
В данном случае список игр - класс-итератор, игра - абстрактный базовый класс, от которого необходимо реализовать не менее 3 наследников.
8. Реализовать программу, имитирующую склад продуктов. В неё можно добавлять различные элементы. Все продукты подразделяются по складам. Складов - не более 4. Реализовать следующие функции:
− Добавление склада
− Удаление склада
− Сортировка складов по алфавиту
Для каждого типа:
− Добавление продукта
− Удаление продукта
− Полная очистка списка
− Вывод списка
В данном случае склад продуктов - класс-итератор, продукт - абстрактный базовый класс, от которого необходимо реализовать не менее 3 наследников.
75
Для проверки определить массив указателей на абстрактный класс, которым присваиваются адреса различных объектов, а затем печатается информация (выполняются требуемые по заданию действия) обо всех конкретных элементах списка.
Теория:
Полиморфизм - это возможность использовать одинаковые имена для методов, входящих в различные классы. Концепция полиморфизма обеспечивает при применении метода к объекту использование именно того метода, который соответствует классу объекта.
Пусть определены три класса, один из них является базовым для двух других.
type
TPerson=class // базовый класс fname: string; { имя }
constructor Create(name: string);
function info: string; virtual;
end;
TStud=class(TPerson) // производный от базового TPerson fgr: integer; { номер группы }
constructor Create(name: string; gr: integer);
function info: string; override;
end;
TProf=class(TPerson) // производный от базового TPerson
fdep: string; { название кафедры }
constructor Create(name: string; dep: string);
function info: string; override;
end;
В каждом из этих классов определен метод info. В базовом классе при помощи директивы virtual метод info объявлен виртуальным. Объявление метода виртуальным дает возможность дочернему классу произвести замену виртуального метода своим собственным. В каждом дочернем классе определен свой метод info, который замещает соответствующий метод родительского класса (метод порожденного класса, замещающий виртуальный метод родительского класса, помечается директивой override). Этот фрагмент помещается в раздел глобальных описаний (перед директивой implementation). Ниже приведено определение метода info для каждого класса.
function TPerson.info: string;
begin
result:=' ';
end;
function TStud.info: string;
begin
result:=fname+' гp.'+IntToStr(fgr);
end;
function TProf.info: string;
begin
result:=fname+' каф.'+fdep;
end;
Этот фрагмент помещается в раздел процедур и функций (после директивы implementation).
В программе список людей, ограниченный 10 персонами, можно представить массивом объектов класса TPerson, и он размещается в разделе глобальных переменных.
const SZL=10; // размер списка
var
list: array [1..SZL] of TPerson; // массив списка
n: infeger; // число персон в списке
Объявить подобным образом список можно потому, что Object Pascal позволяет указателю на родительский класс присвоить значение указателя на дочерний класс. Поэтому элементами массива list могут быть как объекты класса TStud, так и объекты класса Tprof.
Во время работы программы каждый элемент массива может содержать как объект типа TStud, так и объект типа Tprof. Концепция полиморфизма обеспечивает применение объекту именно того метода, который соответствует типу объекта.
На рис. приведено диалоговое окно программы, которая, используя рассмотренные выше объявления классов TPerson, TStud и Tprof, формирует и выводит список студентов и преподавателей.
constructor TPerson.Create(name: string); begin fname:=name;
end;
constructor TStud.Create(name: string; gr: integer) ;
begin inherited create(name);
fgr:=gr;
end;
constructor TProf.Create(name: string; dep: string);
begin inherited create (name) ;
fdep:=dep;
end;
function TPerson.Info: string;
begin
result:=fname ;
end;
function TStud.Info: string;
begin result:=fname+' rp.'+IntToStr(fgr);
end;
function TProf.Info:string;
begin result:=fname+' каф.'+fdep;
end; // добавить элемент в список procedure TForm1.ButtonlClick(Sender; TObject);
begin if n<=SZL then begin if RadioButton1.Checked then // создадим объект TStud
List[n]:=TStud.Create(Editi.Text, StrToInt(Edit2.Text)) else
List[n]:=TProf.Create(Editl.Text, Edit2.Text);
n:=n+l;
end else ShowMessage('Список заполнен!'); end;
{Вывод списка можно осуществить применением метода info к элементам массива, например, так}
procedure TFormI.Button2Click(Sender: TObject);
var i: integer; st: string ;
begin
for i:=1 to SZL do
if list[i] <> NIL then st:=st+list[i].info+#13;
ShowMessage('Список'+#13+st);
end;
Процедура TForm1.Button1ciick, которая запускается в результате щелчка на кнопке Добавить (Button1), создает объект List[n] класса TStud или Tprof. Класс создаваемого объекта определяется состоянием радиокнопки Студент (RadioButton1),
Процедура TForml.Button2Click, которая выполняется в результате щелчка на кнопке Список (Button2), применяя метод info к каждому объекту списка (элементу массива), формирует строку, представляющую собой весь список.
Документ
Категория
Рефераты
Просмотров
218
Размер файла
54 Кб
Теги
лаб
1/--страниц
Пожаловаться на содержимое документа