Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет по лабораторной работе №4

.docx
Скачиваний:
32
Добавлен:
03.10.2022
Размер:
77.86 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА

Кафедра программной инженерии и вычислительной техники

Отчет по лабораторной работе №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

Периферийное устройство компьютера

Принтер, монитор

Минимальная цена устройства

Ход работы

Начальные данные:

Меню:

Изменение данных с клавиатуры:

Полученный результат:

Изменение данных с клавиатуры:

Полученный результат:

Осуществление выхода и конечный результат:

Диаграмма классов с указанием свойств и методов класса

Заключение:

  1. Изучили механизм открытого наследования в С++,

  2. Познакомились с понятием «виртуальная функция»

  3. Освоили технологию конструирования и способы документирования программы, включающей в себя классы-наследники

Примечание

Исходный код:

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