
- •Методические указания к лабораторным работам
- •Порядок выполнения лабораторных работ
- •Оборудование, технические средства, инструмент
- •Требования к оформлению отчета
- •Требования к защите лабораторных работ
- •Лабораторная работа №2. Отношения между классами
- •2.1 Наследование и полиморфизм
- •Int year; //год издания
- •Virtual void Display();//вывод описания публикации
- •Void cPublication:: Display()
- •2.2 Отношение между классами «содержит»
- •Void cMenu::p_menu_find() const // поиск по ключу
- •Void cMenu::p_menu_view() const // просмотр
- •Void cMenu::p_menu_ins()// добавление
СТО АлтГТУ 13.62.1.0667-2011
Методические указания к лабораторным работам
2-й семестр
Порядок выполнения лабораторных работ
Познакомиться с темой и целью лабораторной работы.
Изучить необходимые к выполнению лабораторной работы теоретические сведения и примеры программ.
Познакомиться с общим заданием к лабораторной работе и индивидуальным вариантом задания.
Написать и отладить программу решения задачи индивидуального варианта.
Протестировать работу программы на различных наборах исходных данных.
Продемонстрировать преподавателю работу программы.
Оформить отчет.
Защитить лабораторную работу.
Оборудование, технические средства, инструмент
Лабораторные работы выполняются в компьютерном классе, оснащенном персональными компьютерами. На компьютерах должна быть установлена система программирования, поддерживающая создание консольных программ на С++ (например, Geany, Qt Creator).
Требования к оформлению отчета
Отчет по лабораторной работе оформляется в виде принтерных распечаток на сброшюрованных листах формата А4. Он должен содержать:
титульный лист;
задание к лабораторной работе (общее задание и индивидуальный вариант задания);
постановка задачи;
листинг программы;
тестовые примеры, иллюстрирующие все варианты работы программы.
Требования к защите лабораторных работ
После оформления отчета, лабораторную работу защищают, т. е. поясняют алгоритм работы программы и отвечают на контрольные вопросы.
Лабораторная работа №2. Отношения между классами
Цель работы: получить практические навыки организации и использования отношений между классами и объектами в С++.
2.1 Наследование и полиморфизм
До выполнения первого задания лабораторной работы необходимо изучить как в С++ организуется между классами отношение открытого простого наследования и реализуется полиморфизм.
В качестве примера использования отношения наследования и полиморфизма в листинге 2.1 представлена программа, созданная в Geany, в которой реализовано взаимодействие объектов трех классов: базового класса CPublication и производных классов CBook и CJournal.
Результат выполнения программы в различных вариантах представлен на рисунке 2.1.
Листинг 2.1
// CPublication.h
#ifndef CPUBLICATION_H_
#define CPUBLICATION_H_
//базовый класс "публикация"
class CPublication
{ protected:
char title[80];//название публикации
Int year; //год издания
public:
CPublication(char Title[],int Year);
virtual ~ CPublication(){}
Virtual void Display();//вывод описания публикации
};
#endif
// CPublication.cpp
#include "CPublication.h"
#include <string.h>
#include <iostream>
using namespace std;
CPublication::CPublication(char Title[],int Year)
{ strcpy(title,Title);
year = Year;
}
Void cPublication:: Display()
{ cout << "\nПубликации: ";
cout << "\n Название: "<< title;
cout << "\n Год издания: " << year;
}
// CBook.h
#ifndef CBOOK_H_
#define CBOOK_H_
#include "CPublication.h"
//производный класс "книга"
class CBook : public CPublication
{ protected:
char author[80]; //автор
public:
CBook(char Title[],int Year,char Author[]);
virtual ~ CBook(){}
virtual void Display(); //вывод описания книги
};
#endif
// CBook.cpp
#include "CBook.h"
#include <iostream>
#include <string.h>
using namespace std;
CBook::CBook(char Title[],int Year,char Author[]): CPublication(Title,Year)
{ strcpy(author,Author);
}
void CBook::Display()
{cout << "\nКнига: ";
cout << "Автор: " << author << " ";
cout << "Название: "<< title << " ";
cout << "Год издания: " << year << "\n";
}
// CJournal.h
#ifndef CJOURNAL_H_
#define CJOURNAL_H_
#include "CPublication.h"
// производный класс "журнал"
class CJournal : public CPublication
{ protected:
int number; //номер журнала
public:
CJournal(char Title[],int Year, int Number);
virtual ~ CJournal(){}
virtual void Display();//вывод описания журнала
};
#endif
// CJournal.cpp
#include "CJournal.h"
#include <iostream>
//#include <string.h>
using namespace std;
CJournal::CJournal(char Title[],int Year,int Number): CPublication(Title,Year)
{ number = Number;
}
void CJournal::Display()
{ cout << "\nЖурнал: ";
cout << "Название: "<< title << " ";
cout << "Год издания: " << year << " ";
cout << "Номер: " << number << "\n";
}
// main.cpp
#include "CPublication.h"
#include "CJournal.h"
#include "CBook.h"
#include <string.h>
#include <iostream>
using namespace std;
void vvod(char title1[], int &year1)
{ //ввод названия и года издания публикации
cout << "\nНазвание:"; cin.get();
cin.getline(title1,80);
cout << "\nГод издания:"; cin >> year1;
}
int main()
{ int nMenu, flag = 1, kol;
char title1[80];//название публикации
int year1; //год издания публикации
char author1[80]; //автор книги
int number1; //номер журнала
int i = 0; //индекс нового издания
CPublication* p[100];
cout <<"\n Количество публикаций: ";cin >> kol;
while(i < kol && flag)
{ // вывод пунктов меню
cout<<"\nНовое издание. Введите: " << endl;
cout<<"1-для книги,2-для журнала,3-выход\n";
cin >> nMenu;
switch (nMenu)
{ case 1 : cout << "\nАвтор:"; cin.get(); cin.getline(author1,80);
vvod(title1, year1);
p[i++] = new CBook(title1, year1, author1); break;
case 2 : vvod(title1, year1);
cout << "\nНомер журнала:"; cin >> number1;
p[i++] = new CJournal(title1, year1, number1 ); break;
default : flag = 0; break;
}
}
// вывод описаний изданий
for (int id = 0; id < kol; id++)
{ p[id]->Display();
delete p[id];
}
}
Рисунок 2.1 – Результат выполнения программы
Задание 1: Разработать консольную программу на языке С++, в которой необходимо определить базовый класс и на его основе производные классы. Кроме закрытых полей с данными в классах должны быть методы доступа, конструкторы с параметрами, деструктор, также методы и функции-друзья в соответствии с индивидуальным вариантом задачи. С использованием массива указателей на базовый класс создать массив объектов производных классов и организовать работу с ним..
Базовый класс «СТУДЕНТ» описывает следующие данные о студентах университета: ФИО, год поступления, курс, номер группы, размер стипендии, оценки по n предметам. В состав класса входят следующие функции: виртуальный метод просмотра информации о студенте, функция-друг, которая вычисляет средний балл и выводит ФИО студента, у которого он максимальный. Производный класс «СТУДЕНТ-ОБЩЕСТВЕННИК» содержит следующие элементы: общественная работа, процент надбавки к стипендии, переопределенный метод просмотра информации о студентах-общественниках. Производный класс «СТУДЕНТ-СПОРТСМЕН» содержит следующие элементы: вид спорта, переопределенный метод просмотра информации о студентах-спортсменах.
Базовый класс «СОТРУДНИК» описывает следующие данные о сотрудниках фирмы: ФИО сотрудника; табельный номер; количество отработанных часов за месяц; почасовой тариф. В состав класса входят следующие функции: виртуальная функция просмотра данных о сотрудниках; функция-друг, которая позволяет вывести размер заработанной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 13 % от суммы заработка. Производный класс «СОТРУДНИК-КОМАНДИРОВКИ» содержит следующие элементы: количество командировочных дней в течение месяца; процент надбавки к зарплате за каждый день командировки; переопределенную функцию просмотра информации о сотрудниках, которые в текущем месяце побывали в командировке. Производный класс «СОТРУДНИК-ОБЩЕСТВЕННИК» содержит следующие элементы: общественная работа; переопределенную функцию просмотра информации о сотрудниках-общественниках.
Базовый класс «АБИТУРИЕНТ» описывает следующие данные об абитуриентах, сдавших вступительные экзамены в университет: ФИО; адрес; оценки по предметам. В состав класса входят следующие функции: виртуальная функция просмотра данных о абитуриентах; функция-друг, позволяющая определить количество абитуриентов, проживающих в заданном городе. Производный класс «АБИТУРИЕНТ-ЛЬГОТНИК» содержит следующие данные: описание льготы и переопределенную функцию просмотра информации об абитуриентах, имеющих льготы при поступлении. Производный класс «АБИТУРИЕНТ-СПОРТСМЕН» содержит следующие данные: вид спорта, соревнования, награды и переопределенный метод вывода данных об абитуриентах- спортсменах.
Базовый класс «АВТОБУСНЫЙ РЕЙС» описывает следующие данные-элементы: номер рейса, пункт назначения, цена билета, дата и время отправления, дата и время прибытия на конечный пункт и следующие методы: виртуальную функцию просмотра информации об автобусных рейсах, функцию-друга, которая должна вывести информацию о рейсах, позволяющих добраться до указанного пункта. Производный класс «РЕЙС-ЭКСПРЕСС» содержит следующие данные: процентная надбавка на цену билета и переопределенную функцию просмотра данных о рейсах экспресс. Производный класс «МЕЖДУНАРОДНЫЙ РЕЙС» содержит следующие данные: страна и переопределенную функцию просмотра данных о международных автобусных рейсах.
Базовый класс «ТЕЛЕФОН» описывает данные о разговорах на междугородней АТС: дату разговора, код и название города, продолжительность разговора, тариф, номер телефона в этом городе, номер телефона абонента. В класс входят следующие функции: виртуальная функция просмотра данных о разговорах на междугородней АТС, функция-друг, которая подсчитает суммарное время разговора с указанным городом. Производный класс «ТЕЛЕФОН-ЛЬГОТЫ» содержит следующие данные о льготных тарифах: вид льгот, процент для льготного тарифа, переопределенную функцию просмотра данных о льготных разговорах на междугородней АТС. Производный класс «СРОЧНЫЕ ВЫЗОВЫ» содержит следующие данные: надбавка к тарифу за срочность вызова, переопределенную функцию просмотра данных о срочных разговорах на междугородней АТС.
Базовый класс «ТОВАР» описывает данные о товарах, имеющихся на складе: наименование товара, фирма-изготовитель. В класс входят следующие функции: виртуальная функция просмотра данных о товарах, имеющихся на складе; функция-друг, которая позволяет вывести товары и их данные для указанной фирмы-изготовителя. Производный класс «ИМПОРТИРУЕМЫЙ ТОВАР» содержит следующие данные: страна-поставщик; дата поставки; количество единиц товара; переопределенную функцию просмотра информации об импортируемых товарах. Производный класс «ЭКСПОРТИРУЕМЫЙ ТОВАР» содержит следующие данные: страна-заказчик; количество единиц товара, переопределенную функцию просмотра информации об экспортируемых товарах.
Базовый класс «ДЕТАЛЬ» описывает данные о партиях деталей, выпускаемых различными цехами завода: наименование детали; количество деталей; номер цеха, где они были изготовлены. В класс входят следующие функции: виртуальная функция просмотра данных о партиях деталей, выпускаемых различными цехами завода; функция-друг, позволяющая вычислить общее количество изделий указанного наименования. Производный класс «ДЕТАЛЬ_1» имеет следующие элементы: наличие дополнительного антикоррозийного покрытия; переопределенная функция просмотра данных о партиях деталей. Производный класс «ДЕТАЛЬ_2» имеет следующие элементы: коэффициент надежности в процентах для разных типов деталей; переопределенная функция просмотра данных о партиях деталей.
Базовый класс «ТОВАР» описывает данные о товарах, имеющихся в компьютерном магазине: шифр товара, дата поступления товара; фирма-поставщик, фирма-изготовитель, количество единиц товара. В класс входят следующие функции: виртуальная функция просмотра данных о товарах, имеющихся в магазине; функция-друг, которая выводит информацию о фирмах-поставщиках, которые поставили больше всего товаров. Производный класс «ТОВАР-КОМПЬЮТЕР» содержит следующие данные: тип компьютера (портативный, настольный); производитель; тип процессора; частота процессора; емкость ОЗУ; емкость винчестера, переопределенную функцию просмотра информации о товарах - компьютерах. Производный класс «ТОВАР-МОНИТОР» содержит следующие данные: размер монитора, тип монитора, переопределенную функцию просмотра информации о товарах - мониторах.
Базовый класс «УЧАСТНИК СОРЕВНОВАНИЙ» описывает данные об участниках спортивных соревнований: название соревнования, ФИО спортсмена, возраст, рост, вес. В класс входят следующие элементы-функции: виртуальная функция просмотра информации об участниках спортивных соревнований; функция-друг, которая выведет информацию о самом легком спортсмене. Производный класс «УЧАСТНИК СОРЕВНОВАНИЙ ПО ПЛАВАНИЮ» содержит элементы-данные: результирующее время и переопределенную функцию просмотра данных об участниках соревнований по плаванию. Производный класс «УЧАСТНИК СОРЕВНОВАНИЙ ПО СТРЕЛЬБЕ» содержит элементы-данные: набранные балы и переопределенную функцию просмотра данных об участниках соревнований по стрельбе.
Базовый класс «АВИА-РЕЙСЫ» описывает следующие данные-элементы: номер рейса; пункт назначения; цена билета; время отправления; время прибытия на конечный пункт. В класс входят следующие функции: виртуальная функция просмотра информации об авua - рейсах; функция-друг для вывода информации о рейсах, отправляющихся в указанный пункт назначения по указанной цене билета. Производный класс «АВИА-РЕЙСЫ ПО СТРАНЕ» содержит следующие данные: дни вылета; переопределенную функцию просмотра данных о внутренних авua-рейсах. Производный класс «МЕЖДУНАРОДНЫЕ АВИА-РЕЙСЫ» содержит: страна, дата отправления и дата прибытия, переопределенную функцию просмотра данных о международных авua-рейсах.
Базовый класс «БИБЛИОГРАФ» описывает следующие данные: ФИО сотрудника библиотеки, год рождения, год поступления на работу, категория (библиограф, старший библиограф, главный библиограф, заведующий отделом), название отдела. В класс входят следующие функции: виртуальная функция вывода всех данных о сотруднике библиотеки; функция-друг, которая позволяет вывести ФИО старших библиографов отдела, название которого вводится с клавиатуры. Производный класс «БИБЛИОГРАФ_1» имеет следующие элементы: количество выполняемых справок-заказов в день и переопределенную функцию вывода всех данных о сотруднике библиотеки. Производный класс «БИБЛИОГРАФ_2» имеет следующие элементы: количество выполняемых тематических справок в месяц и переопределенную функцию вывода всех данных о сотруднике библиотеки.
Базовый класс «ПРЕПОДАВАТЕЛЬ» описывает данные: ФИО преподавателя, должность, кафедра. В класс входят следующие функции: виртуальная функция просмотра данных о преподавателе; функция-друг, которая позволяет вывести список преподавателей для указанной кафедры. Производный класс «КУРАТОР» содержит следующие данные: название курируемой группы, номер курса; переопределенную функцию просмотра информации о преподавателях-кураторах. Производный класс «НАУЧНЫЙ РУКОВОДИТЕЛЬ» содержит следующие данные: тема, ФИО студента, переопределенную функцию просмотра информации о преподавателях - научных руководителях.