- •Лабораторная работа № 5. Большое Домашнее Задание (бдз) Наследование классов, виртуальные функции
- •Теоретические сведения
- •Передача параметров в базовый класс
- •Виртуальные функции и полиморфизм
- •Ограничения на использование виртуальных функций
- •Контрольные вопросы
- •Общие требования выполнения работы
- •Обязательные функции для всех вариантов:
Контрольные вопросы
Катко охарактеризуйте механизм наследования: для чего нужно, что дает программисту.
Формат определения производного класса из базового, кратко поясните все элементы.
Public-наследование: особенности доступа из производного класса к данным и методам базового класса
Private-наследование: особенности доступа из производного класса к данным и методам базового класса
Protected-наследование: особенности доступа из производного класса к данным и методам базового класса
Конструкторы и деструкторы при наследовании : последовательность вызова из производного и базового классов.
Передача параметров в конструктор базового класса, приведите простой пример.
Одноименные поля в производном и базовых классах, правила обращения
Для чего нужны виртуальные функции?
Приведите простой пример полиморфизма, реализованного с помощью виртуальной функции.
Общие требования выполнения работы
На первом этапе нужно создать проект программы.
В каждом задании описываются два родственных класса, из которых нужно создать иерархию из 3-х классов (базовый и два производных класса)
определите какие данные будут в базовом, а какие в производных классах
определите интерфейсы (методы) базового и производных классов, при реализации используйте как методы класса, так и дружественные функции
cделайте виртуальными и переопределите в производных классах те методы, для которых это целесообразно и возможно.
Данные размещаются в динамической памяти. При желании можно использовать контейнер vector
Ввод и вывод данных должен быть на русском языке
Как и в предыдущих лабораторных работах должен использоваться диалоговый интерфейс для выбора действия
При выполнении действия «выход из программы» нужно сохранить данные на диске
При первом запуске программы ввод данных с клавиатуры, если программа уже запускалась, то данные загружаются из файла перед выходом на диалог.
Обязательные функции для всех вариантов:
добавить новые элементы производных классов (ввод данных с клавиатуры)
распечатка данных в табличном виде
выход из программы с записью данных на диск
В классе должны быть все необходимые элементы для работы тестовой программы.
К БДЗ предъявляются большие требования, чем к лабораторной работе.
Оценка проходит по 2 критериям:
оценка проекта программы – 50%
оценка реализации (сама программа) – 50%
Оформление ввода-вывода на экране
Надежность работы программы (она должна работать с разнообразными данными, реагировать на ошибки оператора)
Защита БДЗ (ответы на вопросы, по требованию преподавателя – внесение небольших изменений в программу во время защиты)
№ компьютера |
Варианты заданий
|
1,11, 21 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Банк На основе 2-х классов (bank, bank1) спроектировать и реализовать иерархию из одного базового (account) и 2-х производных классов (deposit, credit). Информация о классах для проектирования иерархии: Класс man, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* fam; //фамилия клиента char* name; // имя клиента Добавьте в класс man все необходимые элементы для работы тестовой программы
Класс bank, данные-члены класса располагаются в закрытой области : man fname ; // фамилия и имя клиента (встроенный объект класса man) double sum; // сумма на счете (сумма депозита )
Класс bank1, данные-члены класса располагаются в закрытой области : man fname ; // фамилия и имя клиента (встроенный объект класса man) double credit_sum; // сумма кредита double credit_ percent; // процент по кредиту
Перегрузить следующие операторы: >> ввод объектов классов deposit, credit из входного потока cin (с клавиатуры) == сравнение объектов классов deposit, credit с объектом класса man
Интерфейс базового класса:
Тестовая программа :
|
2,12, 22
|
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Клиника На основе 2-х классов (clinic, clinic1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (doctor,reception).
Информация о классах для проектирования иерархии: Класс man, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* fam; //фамилия клиента char* name; // имя клиента
Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год Добавьте в классы man и date все необходимые элементы для работы тестовой программы
Класс clinic, данные-члены класса располагаются в закрытой области : man fname //фамилия и имя врача int specialty; // специальность(1-терапевт, 2-кардиолог, 3- стоматолог
Класс clinic1 , данные-члены класса располагаются в закрытой области : man fname //фамилия и имя врача int count; // число пациентов date visit; // дата приема
Перегрузить следующие операторы: << вывод объектов класса doctor,reception из выходного потока cout (на терминал) == сравнение объектов класса doctor,reception с объектом класса man
Интерфейс базового класса:
Тестовая программа :
(с использованием перегруженного оператора ==)
(в массиве common* Rez)
|
3,13, 23 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Склад На основе 2-х классов (store, store1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (storage, stock).
Информация о классах для проектирования иерархии: Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год Добавьте в класс date все необходимые элементы для работы тестовой программы
Класс store, данные-члены класса располагаются в закрытой области : char* name; (pri) //название товара double price; (pri) // цена int quant; // количество
Класс store1, данные-члены класса располагаются в закрытой области : char* name; (pri) //название товара double price; (pri) // цена int quant; // количество date best_before // срок годности товара
Перегрузить следующие операторы: > (сравнение) объектов класса storage, stock с объектом типа date << вывод объекттов класса storage, stock в выходной поток cout (на терминал)
Интерфейс базового класса:
Тестовая программа :
|
4,14, 24 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Поезд На основе 2-х классов (tran, tran1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (passenger, ticket).
Информация о классах для проектирования иерархии: Класс man, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* fam; //фамилия пассажира char* name; // имя пассажира Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год Добавьте в классы man и date все необходимые элементы для работы тестовой программы Класс tran, данные-члены класса располагаются в закрытой области man fname //фамилия и имя пассажира char* arrival; // пункт назначения date drive_date // дата поездки Класс tran1, данные-члены класса располагаются в закрытой области man fname //фамилия и имя пассажира double price; // цена билета int vagon; // вагон int place; // место date drive_date // дата поездки
Перегрузить следующие операторы: == (сравнение) объектов классов passenger, ticket с объектом типа man << вывод объектов класса passenger, ticket в выходной поток cout (на терминал)
Интерфейс базового класса:
Тестовая программа :
результат запомнить в виде указателей базового класса (в массиве common* Rez)
|
5,15, 25 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Работник На основе 2-х классов (work, work1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (worker, personnel).
Информация о классах для проектирования иерархии: Класс man, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* fam; //фамилия пассажира char* name; // имя пассажира Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год Добавьте в классы man и date все необходимые элементы для работы тестовой программы Класс worker, данные-члены класса располагаются в закрытой области man fname //фамилия и имя работника int department; (pri)// отдел double pay; // зарплата Класс personnel, данные-члены класса располагаются в закрытой области man fname //фамилия и имя работника char* fam; //профессия double salary; // оклад date drive_date // дата поступления
Перегрузить следующие операторы: == сравнение объектов класса worker, personnel с объектом класса man >> ввод объектов класса worker, personnel из входного потока cin (с клавиатуры)
Интерфейс базового класса:
Тестовая программа :
(с использованием перегруженного оператора ==)
(в массиве common* Rez)
|
6,16, 26 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Почта На основе 2-х классов (post, post1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (letter, delivery).
Информация о классах для проектирования иерархии: Класс man, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* fam; //фамилия пассажира char* name; // имя пассажира
Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год Добавьте в классы man и date все необходимые элементы для работы тестовой программы
Класс post, данные-члены класса располагаются в закрытой области man fname //фамилия и имя получателя char* adr; // адрес получателя man fname //фамилия и имя отправителя double cost; // стоимость письма
Класс post1, данные-члены класса располагаются в закрытой области man fname //фамилия и имя получателя char* adr; // адрес получателя date deliv_date // дата доставки
Перегрузить следующие операторы: == (сравнение) объектов классов letter, delivery с объектом класса man << вывод объектов класса letter, delivery в выходной поток cout (на терминал)
Интерфейс базового класса:
Тестовая программа :
(с использованием перегруженного оператора ==)
|
7,17, 27
|
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Производство (поставщики) На основе 2-х классов (delivery, delivery1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (supplier, supplier1).
Информация о классах для проектирования иерархии: Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год
Класс delivery, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* firma; (pri) // название фирмы поставщика double raw_ material // сумма поставки сырья double payment; (pri) // оплата сырья
Класс delivery1, данные-члены класса располагаются в закрытой области char* firma; (pri) // название фирмы поставщика double raw_ material // сумма поставки сырья date deliv_date // дата поставки
Перегрузить следующие операторы: == (сравнение) объектов классов supplier, supplier1 с объектом класса date >> ввод объектов класса supplier, supplier1 из входного потока cin (с клавиатуры)
Интерфейс базового класса:
Тестовая программа :
|
8,18, 28 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Институт На основе 2-х классов (institute, institute1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (leaner, prepod).
Информация о классах для проектирования иерархии: Класс man, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* fam; //фамилия char* name; // имя
Класс institute, данные-члены класса располагаются в закрытой области man fname //фамилия и имя студента int grup // номер группы
Класс institute1, данные-члены класса располагаются в закрытой области man fname //фамилия и имя преподавателя char* kurs; // название учебного курса enum department // кафедра: перечисляемый тип (например-spintex,bms,pkims)
Перегрузить следующие операторы: == (сравнение) объектов классов leaner, prepod с объектом класса man >> ввод объектов класса leaner, prepod из входного потока cin (с клавиатуры)
Интерфейс базового класса:
Тестовая программа :
(с использованием перегруженного оператора ==)
(с использованием перегруженного оператора ==)
|
9,19, 29 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Культура На основе 2-х классов (culture, culture1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (movie, concert)
Информация о классах для проектирования иерархии: Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год Класс time, данные-члены класса располагаются в закрытой области int hour; // часы int minute; // минуты Класс culture, данные-члены класса располагаются в закрытой области char* cinema; // кинотеатр date film_date // дата сеанса time film_ time // время сеанса int row // ряд int place // место
Класс culture1, данные-члены класса располагаются в закрытой области char* adr; // место проведения концерта date film_date // дата концерта time film_ time // время концерта
Перегрузить следующие операторы: == (сравнение) объектов классов movie, concert с объектом класса date < (сравнение) объектов классов movie, concert с объектом класса time
Интерфейс базового класса:
Тестовая программа :
(с использованием перегруженного оператора ==), результат запомнить в виде указателей базового класса (в массиве common* Rez)
|
10,20, 30 |
При выполнении задания используйте общие требования выполнения работы Создайте проект программы Производство (расчеты) На основе 2-х классов (food, food1) спроектировать и реализовать иерархию из одного базового (common) и 2-х производных классов (product1, product2). Информация о классах для проектирования иерархии: Класс date, данные-члены класса располагаются в закрытой области int day; // день int month; // месяц int year; // год
Класс food, данные-члены класса располагаются в закрытой области (вместо С-строки можно использовать класс string) char* name ; (pri) //Название изделия int quant; // количество double cost; //стоимость
Класс food1, данные-члены класса располагаются в закрытой области char* name ; (pri) //Название изделия date product_date // дата производства date sale_date // дата продажи
Перегрузить следующие операторы: == (сравнение) объектов классов product1, product2 с объектом класса date > (сравнение) объектов классов product1, product2 с объектом класса date
Интерфейс базового класса:
Тестовая программа :
|
