Отчет по лабораторной работе №4
.docxФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА
Кафедра программной инженерии и вычислительной техники
Отчет по лабораторной работе №4
«Конструирование классов на основе принципа наследования»
По дисциплине: «Технологии программирования»
Цель лабораторной работы:
Изучить механизм открытого (public) наследования в C++, познакомиться с понятием «виртуальная функция», освоить технологию конструирования и способы документирования программы, включающей в себя классы-наследники, изучить возможности инструментальных сред разработки по автоматической генерации кода.
Задание:
1. В соответствии с вариантом задания разработать базовый класс. В базовый класс следует включить свойства и методы, общие для заданных классов-наследников. Базовый класс должен включать в себя не менее двух свойств и двух методов, один из которых – виртуальная функция.
2. Разработать классы, производные от базового класса (наследники). Классы-наследники должны наследовать от базового класса хотя бы одно свойство, а также должны иметь хотя бы одно собственное свойство. В классы-наследники должны быть включены следующие методы:
a. Метод, наследуемый от базового класса без переопределения.
b. Виртуальная функция базового класса, переопределённая в производном классе.
c. Собственные методы производного класса. В состав производного класса должен быть включён хотя бы один метод, изменяющий какое-либо свойство класса.
3.Разработать программу, выполняющую следующие действия:
a. Создание нескольких объектов на основе классов–наследников.
b. Объединение объектов в массив (массив указателей на базовый класс).
c. Отображение значений свойств объектов на экране в цикле.
d. Изменение свойств объектов по номеру элемента массива.
e. Вычисление заданного параметра.
f. Выход из программы.
4.Объявление и реализацию каждого класса поместить в отдельный модуль.
5.Действия над объектами (просмотр, изменение, вычисление параметра) должны быть доступны через меню; последовательность выполнения действий – произвольная, в цикле.
6.Представить отчёт следующего содержания:
a. Постановка задачи;
b. Текст программы;
c. Диаграмма классов с указанием свойств и методов класса;
d. Диаграмма компонентов (см. Лабораторная работа № 3).
7 Вариант:
№ Варианта |
Базовый класс |
Производные классы |
Вычисляемый параметр |
7 |
Периферийное устройство компьютера |
Принтер, монитор |
Минимальная цена устройства |
Ход работы
Начальные данные:
Меню:
Изменение данных с клавиатуры:
Полученный результат:
Изменение данных с клавиатуры:
Полученный результат:
Осуществление выхода и конечный результат:
Диаграмма классов с указанием свойств и методов класса
Заключение:
Изучили механизм открытого наследования в С++,
Познакомились с понятием «виртуальная функция»
Освоили технологию конструирования и способы документирования программы, включающей в себя классы-наследники
Примечание
Исходный код:
Main.cpp:
#include <iostream>
#include "pc.h"
#include "printer.h"
#include "monitor.h"
#include <Windows.h>
using namespace std;
int main()
{SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int change=1;
int x=0;
int j=0;
int v=0;
int p,min;
string na,clr,re;
monitor K1(1000,"Apple","1280x400");
monitor K2(1500,"HP","1360x569");
printer S1(1500,"Grey");
printer S2(2000,"black");
pc* pc [4];
int i;
pc[0]=&K1;
pc[1]=&K2;
pc[2]=&S1;
pc[3]=&S2;
for (i=0;i<4;i++) pc[i]->Show();
min = (*(pc+0))->GetPrice();
for (i=0;i<4;i++)
{if ((*(pc+i))->GetPrice()<min)
{min=(*(pc+i))->GetPrice();;} }
cout << "Минимальная цена = " << min << endl;
while(change)
{cout<<"Выберите, что вы хотите изменить.\n1-Монитор.\n2-Принтер.\n3-Выход"<<endl;
cin>>x;
switch(x)
{case 1:
cout<<"Выберите, какой хотите изменить монитор : 1 или 2"<<endl;
cin>>j;
while(j!=1 && j!=2)
{cout<<"Значение выходит за допустимый предел"<<endl;
cin>>j;}
cout<<"Введите новые характеристики Монитора:"<<endl;
cout<<"Введите цену"<<endl;
cin>>p;
cout<<"введите имя"<<endl;
cin>>na;
cout<<"Введите разрешение"<<endl;
cin>>re;
pc[j-1]->SetPrice(p);
pc[j-1]->SetName(na);
pc[j-1]->SetResolution(re);
for (i=0;i<4;i++) pc[i]->Show();
for (i=0;i<4;i++)
{if ((*(pc+i))->GetPrice()<min)
{min=(*(pc+i))->GetPrice();;} }
cout << "Минимальная цена = " << min << endl;
break;
case 2:
cout<<"Выберите, какой хотите изменить принтер : 1 или 2"<<endl;
cin>>v;
while(v!=1 && v!=2)
{cout<<"Значение выходит за допустимый предел"<<endl;
cin>>v;}
cout<<"Введите новые характеристики принтера:"<<endl;
cout<<"Введите цвет"<<endl;
cin>>clr;
cout<<"Введите цену"<<endl;
cin>>p;
pc[v+1]->SetColor(clr);
pc[v+1]->SetPrice(p);;
for (i=0;i<4;i++) pc[i]->Show();
for (i=0;i<4;i++)
{if ((*(pc+i))->GetPrice()<min)
{min=(*(pc+i))->GetPrice();;} }
cout << "Минимальная цена = " << min << endl;
break;
case 3:
change=0;
break;
default:
cout<<"Вы ввели неверное значение"<<endl;
break;} }
return 0; }
Pc.cpp:
#include "pc.h"
using namespace std;
pc::pc():Price(0)
{
Name="NoName";
}
int pc::GetPrice()
{
return Price;
}
int pc::GetNumber()
{
return Number;
}
void pc::Show()
{
cout<<"Number: "<<Number<<" Name: "<<Name<<" Price: "<<Price<<endl;
}
void pc::SetNumber(int Nu)
{
Number=Nu;
}
void pc::SetName(string Na)
{
Name=Na;
}
void pc::SetPrice(int P)
{
Price=P;
}
void pc::SetResolution(string Re)
{
}
void pc::SetColor(string Clr)
{
}
Pc.h:
#ifndef PC_H
#define PC_H
#include <iostream>
#include <string.h>
using namespace std;
class pc
{public:
pc();
int GetPrice();
int GetNumber();
virtual void Show();
virtual void SetResolution(string);
virtual void SetColor(string);
void SetNumber(int);
void SetName(string);
void SetPrice(int);
protected:
int Number;
string Name;
int Price;
string Color;
string Resolution;
private: };
#endif
Printer.cpp:
#include "printer.h"
using namespace std;
printer::printer(int P, string Clr)
{Price=P;
Color=Clr;}
void printer::SetColor(string Clr)
{Color=Clr;}
void printer::SetPrice(int P)
{Price=P;}
void printer::Show()
{cout<<"Price : "<<Price<<" Color : "<<Color<<endl; }
Printer.h:
#ifndef PRINTER_H
#define PRINTER_H
#include "pc.h"
using namespace std;
class printer : public pc
{public:
printer(int,string);
void SetPrice(int);
void SetColor(string);
void Show();
private:
string Color;};
#endif
Monitor.cpp:
#include "monitor.h"
using namespace std;
monitor::monitor(int P, string Na, string Re)
{
Price=P;
Name=Na;
Resolution=Re;
}
void monitor::SetResolution(string Re)
{
Resolution=Re;
}
void monitor::SetPrice(int P)
{
Price=P;
}
void monitor::Show()
{
cout<<"Price: "<<Price<<" Name: "<<Name<<" Resolution: "<<Resolution<<endl;
}
Monitor.h:
#ifndef MONITOR_H
#define MONITOR_H
#include "pc.h"
using namespace std;
class monitor:public pc
{
public:
monitor(int,string,string);
void SetResolution(string);
void SetPrice(int);
void Show();
private:
string Resolution;
};
#endif // MONITOR_H