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

lab

.docx
Скачиваний:
0
Добавлен:
12.04.2025
Размер:
55.64 Кб
Скачать

ГУАП

КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Старший преподаватель

Д.В. Куртяник

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ

МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ. ПОЛИМОРФИЗМ.

по курсу: ОСНОВЫ ПРОГРАММИРОВАНИЯ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

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++.

Соседние файлы в предмете Основы программирования