Описание выходных данных
Скачать 183.74 Kb.
|
Описание выходных данныхВывести иерархию объектов в следующем виде: Object tree «Наименование корневого объекта» «Наименование объекта 1» «Наименование объекта 2» «Наименование объекта 3» . . . . . Отступ каждого уровня иерархии 4 позиции. Метод решенияИзменения в классе Base: Добавлен новый метод print3 с целочисленным параметром space - выводит иерархическое древо Изменения в класее Application: Изменение метода build - строит древо иерархии объектов Изменение метода start - запуск приложения с другим методом вывода Добавлен класс Object5: Методы: Конструктор с параметрами - указатель на головной объект (parent), объекта (name) Добавлен класс Object6 Методы: Конструктор с параметрами - указатель на головной объект (parent), объекта (name)
Описание алгоритмаКласс объекта: Base Модификатор доступа: public Метод: print3 Функционал: выводит иерархическое древо Параметры: int space - количество пробелов Возвращаемое значение: -
Класс объекта: Application Модификатор доступа: public Метод: build Функционал: строит древо иерархии объектов Параметры: - Возвращаемое значение: -
Класс объекта: Aplication Модификатор доступа: public Метод: start Функционал: запуск приложения Параметры: - Возвращаемое значение: int - код возврата
Класс объекта: Object5 Модификатор доступа: public Метод: Object5 Функционал: конструктор Параметры: parent - указатель на головной объект класса Base, string name - наименование объекта Возвращаемое значение: конструктор
Класс объекта: Object6 Модификатор доступа: public Метод: Object6 Функционал: конструктор Параметры: parent - указатель на головной объект класса Base, string name - наименование объекта Возвращаемое значение: конструктор
Блок-схема алгоритмаКод программы Файл Application.cpp#include "Application.h" #include "Children.h" #include "Object2.h" #include "Object3.h" #include "Object4.h" #include "Object5.h" #include "Object6.h" #include Application::Application(Base *parent) : Base (parent, "root") { //string needName; //cin>>needName; //root = new Base(parent, needName, 1); } void Application::build() { string parent, name, children; int status, num; Base* temp; cin >> name; setName(name); do { cin >> parent >> children >> num >> status; temp = findBase(parent); switch(num) { tempChildren = new Object2(temp,children); >getStatus(status); tempChildren = new Object3(temp,children); >getStatus(status); tempChildren = new Object4(temp,children); >getStatus(status); tempChildren = new Object5(temp,children); >getStatus(status); tempChildren = new Object6(temp,children); case 2: { } case 3: { } case 4: { } case 5: { } case 6: { Object2* tempChildren- break; Object3* tempChildren- break; Object4* tempChildren- break; Object5* tempChildren- break; Object6* >getStatus(status); } tempChildren- break; } } while (parent != "endtree"); } int Application::start() { cout<<"Object tree\n"; print3(0); return 0; } Файл Application.h#ifndef Application_h #define Application_h #include "Base.h" #include "Children.h" class Application : public Base { private: }; #endif public: Base *root; Application(Base *parent); void build(); int start(); Файл Base.cpp#include "Base.h" #include Base::Base(Base *parent, string name) { this->name = name; this->parent = parent; this->status = 1; if(parent != nullptr) { parent->subses.push_back(this); } Base::Base() { } for (int i=0; i< subses.size(); i++) { delete subses[i]; } } void Base::setName(string name) { this->name = name; } string Base::getName() { return name; } void Base::print2() { if(this->status > 0) { cout << "\nThe object " << name << " is ready"; ready"; } else { } cout << "\nThe object " << name << " is not for(int i = 0; i < subses.size(); i++) { subses[i]->print2(); } } void Base::print3(int space) { if (parent == 0) { cout << name; space += 4; } for (int i = 0; i < subses.size(); i++) { string str = ""; for (int i = 0; i < space; i++) { str+=" "; } cout << endl << str << subses[i]->name; subses[i]->print3(space+4); } } void Base::printSubses() { if(subses.size() == 0) return; cout< for(int i = 0; i < subses.size(); i++) { cout<<" "< } for(int i = 0; i < subses.size(); i++) { if(subses[i]->subses.size() > 0) { subses[i]->printSubses(); } } } void Base::setParent(Base *p_parent) { for(int i = 0; i < parent->subses.size(); i++) { if(this == parent->subses[i]) { parent->subses.erase(parent- >subses.begin() + 1); } } break; this->parent = p_parent; p_parent->subses.push_back(this); } Base *Base::getParent() { return parent; } Base *Base::findBase(string name) { if(this->name==name) { return this; } Base *finded = nullptr; for(int i = 0; i < subses.size(); i++) { finded = subses[i]->findBase(name); if(finded != nullptr) { return finded; } } return nullptr; } void Base::getStatus(int status) { this->status = status; } Файл Base.h#ifndef _BASE_H #define _BASE_H #include }; #endif public: private: Base(Base *parent, string name); Base(); void setName(string name); string getName(); void print2(); void print3(int space); void printSubses(); void setParent(Base *parent); Base *getParent(); Base *findBase(string name); void getStatus(int status); string name; Base *parent; int status; vector Файл Children.cpp#include "Children.h" Children::Children(Base *parent, string name) : Base (parent, name) {} Файл Children.h#ifndef Children_h #define Children_h #include "Base.h" class Children : public Base { private: public: Children(Base *parent, string name); }; #endif Файл main.cpp#include int main() { Application application(nullptr); application.build(); return application.start(); } Файл Object2.cpp#include "Object2.h" Object2::Object2(Base *parent, string name) : Base (parent, name) {} Файл Object2.h#ifndef Object2_h #define Object2_h #include "Base.h" class Object2 : public Base { private: public: Object2(Base *parent, string name); }; #endif Файл Object3.cpp#include "Object3.h" Object3::Object3(Base *parent, string name) : Base (parent, name) {} Файл Object3.h#ifndef Object3_h #define Object3_h #include "Base.h" class Object3 : public Base { private: public: Object3(Base *parent, string name); }; #endif Файл Object4.cpp#include "Object4.h" Object4::Object4(Base *parent, string name) : Base (parent, name) {} Файл Object4.h#ifndef Object4_h #define Object4_h #include "Base.h" class Object4 : public Base { private: public: Object4(Base *parent, string name); }; #endif Файл Object5.cpp#include "Object5.h" Object5::Object5(Base *parent, string name) : Base (parent, name) {} Файл Object5.h#ifndef Object5_h #define Object5_h #include "Base.h" class Object5 : public Base { private: public: Object5(Base *parent, string name); }; #endif Файл Object6.cpp#include "Object6.h" Object6::Object6(Base *parent, string name) : Base (parent, name) {} Файл Object6.h#ifndef Object6_h #define Object6_h #include "Base.h" class Object6 : public Base { private: public: Object6(Base *parent, string name); }; #endif Тестирование
ЗаключениеНаучился: разрабатывать базовый класс для объектов; определять общий функционал для используемых в рамках приложения объектов; разрабатывать операции добавления, удаления, изменения позиции объекта в рамках иерархического дерева; освоил алгоритмы обработки структур данных в виде дерева; построению дерева иерархии объектов; переключению состояния объектов и определению их готовности к работе; выводить на печать иерархию объектов. Список используемой литературы (источников)Васильев А.Н. Объектно-ориентированное программирование на С++. Издательство: Наука и Техника. Санкт-Петербург, 2016г. 543 стр. Шилдт Г. С++: базовый курс. 3-е изд. Пер. с англ.. — М.: Вильямс, 2017. — 624 с. Методическое пособие для проведения практических заданий, контрольных и курсовых работ по дисциплине «Объектно-ориентированное программирование» [Электронный ресурс] – URL: https://online-edu.mirea.ru/mod/resource/view.php?id=247030 (дата обращения 05.05.2021). Приложение к методическому пособию студента по выполнению заданий в рамках курса «Объектно-ориентированное программирование» [Электронный ресурс]. АСО «Аврора». Видео лекции по курсу «Объектно-ориентированное программирование» [Электронный ресурс]. АСО «Аврора». Антик М.И. Дискретная математика [Электронный ресурс]: Учебное пособие /Антик М.И., Казанцева Л.В. — М.: МИРЭА — Российский технологический университет, 2018 — 1 электрон. опт. диск (CD-ROM). |