
lab
.docxГУАП
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Старший преподаватель |
|
|
|
Д.В. Куртяник |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ |
МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ. ПОЛИМОРФИЗМ. |
по курсу: ОСНОВЫ ПРОГРАММИРОВАНИЯ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
4116 |
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2022
Цель лабораторной работы: изучение видов наследования и способов их применения; изучение способов использования виртуальных функций, абстрактных классов; получение навыков объектно-ориентированного программирования на языке C++.
Задание на программирование: Используя технологию объектно-ориентированного программирования, разработать программу.
Номер вариант и индивидуальное задание
23. Земельный участок – Способ использования – Комбинации
Описание модели решения:
В заголовочном файле class.h были созданы классы.
В заголовочный файл Header.h были вынесены методы классов.
Базовый класс land_plot – абстрактный, оснащённый конструктором, который при вызове присваивает строкам свои значения. Для корректной работы, все деструкторы в программе виртуальные. Базовый класс оснащён чисто виртуальным методом base, который перекрывается в классах, наследующих базовый.
Класс Parkovka оснащён конструктором, который передаёт значение в ранее объявленную строку. Класс Parkovka наследует класс land_plot с модификатором virtual protected. В классе Parkovka перегружен метод base, создан метод is_parkovka, который заполняет строку, в последствии этот метод используется в классах наследниках. Класс House и Garden имеют подобную структуру, за исключением содержимого, передаваемого в строки. Класc Zastroyshchik наследует классы Parkovka и House для последующего использования методов, описанных в них. В классе Zastroyshchik перегружен метод базового класса base, метод by_ zastroyshchik заполняет строку с использованием методов наследуемых классов. Конструктор заполняет объявленные ранее строки. Класс Dachnik работает аналогично классу Zastroyshchik, за исключением передаваемых в строки значений. В файле main.cpp создаются объекты всех представленных классов, за исключением класса land_plot, т.к. он является абстрактным. В главной функции вызываются все методы каждого из классов.
Исходный код:
main.cpp
#include "Header.h"
int main()
{
Parkovka p;
p.base();
cout<<p.is_parkovka()<<endl;
House h;
h.base();
cout<<h.is_house()<< endl;
Garden g;
g.base();
cout<<g.is_garden()<<endl;
Zastroyshchik z;
z.base();
cout<<z.by_zastroyshchik()<<endl;
Dachnik d;
d.base();;
cout << d.by_dachnik() << endl<<endl;
}
class.h
#include <iostream>
#include <string>
using namespace std;
class land_plot
{
protected:
string b;
string p;
public:
land_plot()
{
b = " built ";
p = " planted ";
}
virtual ~land_plot()
{
cout << "land_plot deleted" << endl<< endl;
}
virtual void base() =0;
};
class Parkovka : virtual protected land_plot
{
protected:
string parkovka;
friend class land_plot;
public:
Parkovka()
{
parkovka = "parkovka";
}
virtual ~Parkovka()
{
cout <<"Parkovka deleted" << endl;
}
void base();
string is_parkovka();
};
class House : virtual protected land_plot
{
protected:
string house;
public:
House()
{
house = "house";
}
virtual ~House() {
cout << "House deleted" << endl;
}
string is_house ();
void base();
};
class Garden : virtual protected land_plot
{
protected:
string garden;
public:
Garden() {
garden = "garden";
}
virtual ~Garden()
{
cout << "Garden deleted" << endl;
}
void base();
string is_garden();
};
class Zastroyshchik : virtual protected House, virtual protected Parkovka
{
protected:
string zastroyshchik;
string a;
public:
Zastroyshchik()
{
zastroyshchik = " by zastroyshchik";
a = " and ";
}
virtual ~Zastroyshchik()
{
cout << "zastroyshchik deleted" << endl;
}
string by_zastroyshchik();
void base();
};
class Dachnik : virtual protected House, virtual protected Garden
{
protected:
string dachnik;
string a;
public:
Dachnik()
{
dachnik = "by dachnik";
a = " and ";
}
virtual ~Dachnik()
{
cout << "Dachnik deleted" << endl;
}
string by_dachnik();
void base();
};
Header.h
#include <iostream>
#include "class.h"
#include <string>
using namespace std;
void Parkovka::base()
{
cout << "Parkovka class" << endl;
}
string Parkovka::is_parkovka()
{
return(parkovka + " is" + b);
}
void House::base()
{
cout << "House class" << endl;
}
string House:: is_house()
{
return(house + " is" + b);
}
void Garden::base()
{
cout << "Garden class" << endl;
}
string Garden::is_garden()
{
return(garden + " is" + p);
}
void Zastroyshchik::base()
{
cout << "Zastroyshchik class" << endl;
}
string Zastroyshchik::by_zastroyshchik()
{
return(is_parkovka() + a + is_house() + zastroyshchik);
}
void Dachnik::base()
{
cout << "Dachnik class" << endl;
}
string Dachnik::by_dachnik()
{
return(is_house() + a + is_garden() + dachnik);
}
Результат работы программы:
Вывод: были изучены виды наследования и способы их применения; изучены способы использования виртуальных функций, абстрактных классов; получены навыки объектно-ориентированного программирования на языке C++.