Добавил:
владимир Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_С++ / Лабы / ООП_Лабораторная работа №5.doc
Скачиваний:
0
Добавлен:
17.08.2025
Размер:
261.12 Кб
Скачать

Контрольные вопросы

  1. Катко охарактеризуйте механизм наследования: для чего нужно, что дает программисту.

  2. Формат определения производного класса из базового, кратко поясните все элементы.

  3. Public-наследование: особенности доступа из производного класса к данным и методам базового класса

  4. Private-наследование: особенности доступа из производного класса к данным и методам базового класса

  5. Protected-наследование: особенности доступа из производного класса к данным и методам базового класса

  6. Конструкторы и деструкторы при наследовании : последовательность вызова из производного и базового классов.

  7. Передача параметров в конструктор базового класса, приведите простой пример.

  8. Одноименные поля в производном и базовых классах, правила обращения

  9. Для чего нужны виртуальные функции?

  10. Приведите простой пример полиморфизма, реализованного с помощью виртуальной функции.

Общие требования выполнения работы

  1. На первом этапе нужно создать проект программы.

В каждом задании описываются два родственных класса, из которых нужно создать иерархию из 3-х классов (базовый и два производных класса)

  • определите какие данные будут в базовом, а какие в производных классах

  • определите интерфейсы (методы) базового и производных классов, при реализации используйте как методы класса, так и дружественные функции

  • cделайте виртуальными и переопределите в производных классах те методы, для которых это целесообразно и возможно.

  1. Данные размещаются в динамической памяти. При желании можно использовать контейнер vector

  2. Ввод и вывод данных должен быть на русском языке

  3. Как и в предыдущих лабораторных работах должен использоваться диалоговый интерфейс для выбора действия

  4. При выполнении действия «выход из программы» нужно сохранить данные на диске

  5. При первом запуске программы ввод данных с клавиатуры, если программа уже запускалась, то данные загружаются из файла перед выходом на диалог.

  6. Обязательные функции для всех вариантов:

  • добавить новые элементы производных классов (ввод данных с клавиатуры)

  • распечатка данных в табличном виде

  • выход из программы с записью данных на диск

  1. В классе должны быть все необходимые элементы для работы тестовой программы.

К БДЗ предъявляются большие требования, чем к лабораторной работе.

Оценка проходит по 2 критериям:

  1. оценка проекта программы – 50%

  2. оценка реализации (сама программа) – 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

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Создать функции для данного варианта:

  • поиск клиента по фамилии и имени

  • поиск клиентов с суммой кредита или на счете больше заданной

Тестовая программа :

  1. В динамические массивы Dep и Cred добавить несколько новых экземпляров классов deposit, credit (ввод с клавиатуры с использованием перегруженного оператора >>)

  2. В массивах Dep и Cred найти клиентов по заданному имени и фамилии (с использованием перегруженного оператора ==), результат запомнить в виде указателей базового класса (в массиве account* Rez)

  3. Результаты выводить на экран в табличном виде

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

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Создать функции для данного варианта:

  • поиск врача по фамилии и имени

  • поиск врачей определенной специальности

Тестовая программа :

  1. В динамические массивы Doc и Rec добавить несколько новых экземпляров классов doctor,reception

  2. В массивах Doc и Rec найти врача по заданному имени и фамилии

(с использованием перегруженного оператора ==)

  1. В динамических массивах Doc и Rec найти врачей определенной специальности, результат запомнить в виде указателей базового класса

(в массиве common* Rez)

  1. Результаты выводить на экран в табличном виде

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 (на терминал)

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Создать функции для данного варианта:

  • поиск товара по названию

  • поиск просроченных товаров

Тестовая программа :

  1. В динамические массивы Stor и Stor1 добавить несколько новых экземпляров классов storage, stock

  2. В массивах Stor и Stor1 найти товар с количеством меньше заданного, результат запомнить в виде указателей базового класса (в массиве common* Rez)

  3. В массивах Stor и Stor1 найти просроченные товары (с использованием перегруженного оператора >), результат запомнить в виде указателей базового класса (в массиве common* Rez)

  4. Результаты выводить на экран в табличном виде

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 (на терминал)

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Создать функции для данного варианта:

  • поиск по фамилии и имени

  • поиск до дате

Тестовая программа :

  1. В динамические массивы Pas и Tick добавить несколько новых экземпляров классов passenger, ticket

  2. В массиве Pas найти пассажира по фамилии и имени (с использованием перегруженного оператора ==)

  3. В динамических массивах Pas и Tick найти пассажиров по заданной дате поезки,

результат запомнить в виде указателей базового класса (в массиве common* Rez)

  1. Результаты выводить на экран в табличном виде

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 (с клавиатуры)

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Функции для данного варианта:

  • поиск по фамилии и имени

  • поиск до дате

Тестовая программа :

  1. В динамические массивы Work и Pers добавить несколько новых экземпляров классов worker, personnel

  2. В массивах Work и Pers найти пассажира по фамилии и имени

(с использованием перегруженного оператора ==)

  1. В массивах Work и Pers найти работников по заданному окладу (зарплате), результат запомнить в виде указателей базового класса

(в массиве common* Rez)

  1. Результаты выводить на экран в табличном виде

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 (на терминал)

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Функции для данного варианта:

  • поиск по фамилии и имени (с использованием перегруженного оператора ==)

  • поиск до дате

Тестовая программа :

  1. В динамические массивы Let и Deliv добавить несколько новых экземпляров классов letter, delivery

  2. В динамических массивах Let и Deliv найти получателя по фамилии и имени

(с использованием перегруженного оператора ==)

  1. В массиве Deliv найти все доставки по заданной дате, результат запомнить в виде указателей базового класса (в массиве common* Rez)

  2. Результаты выводить на экран в табличном виде

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 (с клавиатуры)

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Функции для данного варианта:

  • поиск до дате

  • вывод объектов класса на терминал

Тестовая программа :

  1. В динамические массивы Sup и Sup1 добавить несколько новых экземпляров классов supplier, supplier1

  2. В массивах Sup и Sup1 найти заданную фирму, результат запомнить в виде указателей базового класса (в массиве common* Rez)

  3. В массиве Sup1 найти все поставки по заданной дате (с использованием перегруженного оператора ==)

  4. Результаты выводить на экран в табличном виде

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 (с клавиатуры)

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Функции для данного варианта:

  • поиск до фамилии и имени

  • вывод объектов класса на терминал

Тестовая программа :

  1. В динамические массивы Len и Prep добавить несколько новых экземпляров классов leaner, prepod

  2. В массиве Len найти всех студентов по фамилии и имени

(с использованием перегруженного оператора ==)

  1. В массиве Prep найти всех преподавателей по фамилии и имени

(с использованием перегруженного оператора ==)

  1. Результаты выводить на экран в табличном виде

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

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Функции для данного варианта:

  • поиск до дате

  • ввод объектов класса с клавиатуры

Тестовая программа :

  1. В динамические массивы Mov и Con добавить несколько новых экземпляров классов movie, concert

  2. В массивах Mov и Con найти все мероприятия по заданной дате

(с использованием перегруженного оператора ==), результат запомнить в виде указателей базового класса (в массиве common* Rez)

  1. В массивах Mov и Con найти найти все мероприятия позже заданного времени (с использованием перегруженного оператора <), результат запомнить в виде указателей базового класса (в массиве common* Rez)

  2. Результаты выводить на экран в табличном виде

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

Интерфейс базового класса:

  1. Обязательные функции, указанные в общих требованиях

  2. Функции для данного варианта:

  • поиск до дате

  • вывод объектов класса на терминал

Тестовая программа :

  1. В динамические массивы Prod и Prod1 добавить несколько новых экземпляров классов product1, product2

  2. В массивах Prod и Prod1 найти заданное изделие, результат запомнить в виде указателей базового класса (в массиве common* Rez)

  3. В массиве Prod1 найти все изделия по заданной дате продажи (с использованием перегруженного оператора ==)

  4. В массиве Prod1 найти все изделия с более ранней датой производства, чем заданная дата (с использованием перегруженного оператора >)

  5. Результаты выводить на экран в табличном виде