Множинне спадкування. Поліморфізм

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2016
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет „Львівська політехніка” Кафедра EОМ Звіт з лабораторної роботи №7 з дисципліни: “Об’єктно-орієнтовне програмування ” «Множинне спадкування. Поліморфізм» Мета роботи Познайомитися із класами та об’єктами. Завдання лабораторної роботи Хід виконання роботи Текст програми Текст файлу CFighter.ccp #include "CFighter.h" #include <random> #include <iostream> using namespace std; void CFighter::fighte(std::string radar) { if(radar == "Enemy") fighte_regime = "fighte"; else fighte_regime = "Off fighte regime"; } void CFighter::escape(std::string radar) { if(radar == "Enemy!") escape_regime = "escape"; else escape_regime = "Off escape regime"; } void CFighter::search(void) { cout << "Enemy" << endl; cout << "Enemy!" << endl; cout << "No enemy" << endl; cin >> radar; this -> fighte(radar); this -> escape(radar); } CFighter CFighter::operator=(CFighter &object) { this -> height = object.height; this -> fuel = object.fuel; this -> cycle = object.cycle; this -> regime = object.regime; this -> spead = object.spead; this -> radar = object.radar; this -> fighte_regime = object.fighte_regime; this -> escape_regime = object.escape_regime; return *this; } CFighter::CFighter() { radar = "No enemy"; fighte_regime = "Off fighte regime"; escape_regime = "Off escape regime"; } CFighter::~CFighter() {} Текст файлу CFighter.h #ifndef ATTACK_AIRCRAFT_CFIGHTER_H #define ATTACK_AIRCRAFT_CFIGHTER_H #include <string> #include "CPlane.h" /* * Клас відповідальний за режим винищувача */ class CFighter: virtual public CPlane { public: std::string radar; // Показує присутність чи відсутність ворогів std::string fighte_regime; std::string escape_regime; void fighte(std::string radar); void escape(std::string radar); void search(void); CFighter operator=(CFighter &object); CFighter(); virtual ~CFighter(); }; #endif //ATTACK_AIRCRAFT_CFIGHTER_H Текст файлу CPlane.cpp #include "CPlane.h" CPlane::CPlane() { height = 0; fuel = 100; cycle = 0; regime = "Off engine"; spead = new int; } CPlane::~CPlane() { delete spead; } void CPlane::change_height(int new_height) { height = new_height; } void CPlane::change_cycle(int new_cycle) { if(fuel <= 0) fuel = 100; cycle = new_cycle; } /* * Режими польоту, при зміні режимі змінюються властивості класу */ void CPlane::change_regime(std::string new_regime) { if(new_regime == "Rise"){ regime = new_regime; cycle = 2000; fuel = fuel - 20; *spead = cycle / 20; } if(new_regime == "Flight"){ regime = new_regime; cycle = 4000; fuel = fuel - 20; *spead = cycle / 20; } if(new_regime == "Acceleration"){ regime = new_regime; cycle = 6000; fuel = fuel - 20; *spead = cycle / 20; } if(new_regime == "Landing"){ regime = new_regime; cycle = 1000; fuel = fuel - 20; *spead = cycle / 20; } } CPlane CPlane::operator=(CPlane &object) { this -> height = object.height; this -> fuel = object.fuel; this -> cycle = object.cycle; this -> regime = object.regime; this -> spead = object.spead; return *this; } Текст файлу CPlane.h #ifndef ATTACK_AIRCRAFT_CPLANE_H #define ATTACK_AIRCRAFT_CPLANE_H #include<string> /* * Клас відповідальний за політ */ class CPlane { public: int height; int fuel; int cycle; int *spead; std::string regime; void change_height(int new_height); void change_cycle(int new_cycle); void change_regime(std::string new_regime); CPlane operator=(CPlane &object); CPlane(); virtual ~CPlane(); }; #endif //ATTACK_AIRCRAFT_CPLANE_H Текст файлу CBomber.h #ifndef ATTACK_AIRCRAFT_CBOMBER_H #define ATTACK_AIRCRAFT_CBOMBER_H #include "CPlane.h" /* * Клас який відповідає за бомбардування */ class CBomber: virtual public CPlane{ public: int number_of_bombs; std::string bomb_regime; void change_bomb_regime(std::string new_regime); CBomber operator=(CBomber &object); CBomber(); virtual ~CBomber(); }; #endif //ATTACK_AIRCRAFT_CBOMBER_H Текст файлу CBomber.cpp #include "CBomber.h" using namespace std; void CBomber::change_bomb_regime(std::string new_regime) { // Бомбардування можливе тільки в певному режимі if(this -> regime == "Acceleration" && new_regime == "bombing"){ bomb_regime = new_regime; if(number_of_bombs != 0){ if(number_of_bombs >= 500) number_of_bombs = number_of_bombs - 500; else number_of_bombs = 0; } } else bomb_regime = new_regime; } CBomber CBomber::operator=(CBomber &object) { this -> height = object.height; this -> fuel = object.fuel; this -> cycle = object.cycle; this -> regime = object.regime; this -> spead = object.spead; this -> number_of_bombs = object.number_of_bombs; this -> bomb_regime = object.bomb_regime; return *this; } CBomber::CBomber() { bomb_regime = "Off bombing"; number_of_bombs = 1500; } CBomber::~CBomber() {} Текст файлу CassaultPlane.cpp #include "CAssaultPlane.h" #include <iostream> using namespace std; /* * Інтерфейс класу */ bool CAssaultPlane::menu(void) { if(fuel <= 0) { cout << "Ended fuel. Implemented landing." << endl; return true; } cout << "\t\tMake your choice" << endl; cout << "1 - State aircraft" << endl; cout << "2 - Control plane" << endl; cout << "3 - Change height" << endl; cout << "4 - Changes in the number of revolutions per second" << endl; cout << "5 - Daily bomber" << endl; cout << "6 - Information from the radar" << endl; cout << "7 - Exit the program\n"; unsigned num; cin >> num; string regime; int number; switch( num ) { case 1 : state(); break; case 2 : cout << "Rise" << endl; cout << "Flight" << endl; cout << "Acceleration" << endl; cout << "Landing" << endl; cin >> regime; change_regime(regime); break; case 3 : cin >> number; change_height(number); break; case 4 : cin >> number; change_cycle(number); break; case 5 : cout << "Bombing" << endl; cout << "Off bombing" << endl; cin >> regime; if(regime == "Bombing"){ while (regime != "Acceleration") { cout << "Warning! You can not drop bombs until the airplane is in standby Acceleretion" << endl; cout << "Rise" << endl; cout << "Flight" << endl; cout << "Acceleration" << endl; cout << "Landing" << endl; cin >> regime; change_regime(regime); } change_bomb_regime("Acceleretion"); } break; case 6 : search(); break; case 7: return true; default: break; } return false; } /* * Вивід всіх властивостей класу */ void CAssaultPlane::state(void) { cout << "Height - " << height << endl; cout << "Fuel - " << fuel << endl; cout << "Cycle - " << cycle << endl; cout << "Spead - " << *spead << endl; cout << "Regime - " << regime << endl; cout << "Number of bombs - " << number_of_bombs << endl; cout << "Bomb regime - " << bomb_regime << endl; cout << "Fighte regime - " << fighte_regime << endl; cout << "Escape regime - " << escape_regime << endl; } Текст файлу CassaultPlane.h #ifndef ATTACK_AIRCRAFT_CASSAULTPLANE_H #define ATTACK_AIRCRAFT_CASSAULTPLANE_H #include "CFighter.h" #include "CBomber.h" /* * Клас який наслідує всі інші класи */ class CAssaultPlane: public CBomber, public CFighter { public: void state(void); bool menu(void); }; #endif //ATTACK_AIRCRAFT_CASSAULTPLANE_H Текст файлу main.h #include <iostream> #include "CAssaultPlane.h" using namespace std; int main() { CAssaultPlane object; while(!object.menu()){} return 0; } Результати тестування програми  Рис. 1. Результати тестування програми Моя програма успішно реалізує множинне наслідування(рис.1.) та створює абстракцію Літака. Висновок У цій лабараторній роботі я засвоїв принцип множинного наслідування класів, дізнався про поняття поліморфізм. Зрозумів призначення віртуального класу.
Антиботан аватар за замовчуванням

24.11.2018 19:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!