DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти і науки Національний університет „Львівська політехніка” Кафедра 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:49

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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