24.02.2020, 20:07 | #1 (permalink) |
Новичок
Регистрация: 24.02.2020
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Абстрактные классы
Создать класс Series(набор), содержащий массив объектов этих классов в динамической памяти. Предусмотреть вохможность вывода характеристик объектов списка. Код весь ниже: Код:
//ConsoleApplication6 #include "pch.h" #include <iostream> #include "Parallelepiped.h" #include "Body.h" #include "Ball.h" #include "Cone.h" #include <vector> using namespace std; int main() { setlocale(LC_ALL, "Russian"); int e; do { system("pause"); system("cls"); cout << "[Protected By Airat]=> Введите номер выбора: " << endl; cout << "1. Найти объем и площадь прямоугольного параллелепипеда. " << endl; cout << "2. Найти объем и площадь шара." << endl; cout << "3. Найти объем и площадь конуса." << endl; cout << "4. Выход из программы." << endl; cin >> e; switch (e) { case 1: { std::vector<Body *> bodies; bodies.emplace_back(new Parallelepiped(1, 2, 3)); for (auto* body : bodies) body->Print(std::cout) << ", S = " << body->SurfaceArea() << ", V = " << body->Volume() << std::endl; for (auto* body : bodies) delete body; }; break; case 2: { std::vector<Body *> bodies; bodies.emplace_back(new Ball(1, 2, 3)); for (auto* body : bodies) body->Print(std::cout) << ", S = " << body->SurfaceArea() << ", V = " << body->Volume() << std::endl; for (auto* body : bodies) delete body; }; break; case 3: { std::vector<Body *> bodies; bodies.emplace_back(new Cone(1, 2, 3)); for (auto* body : bodies) body->Print(std::cout) << ", S = " << body->SurfaceArea() << ", V = " << body->Volume() << std::endl; for (auto* body : bodies) delete body; }break; case 4: { return 0; }; break; } } while (e != 7); // Series series(100); //series.Add(new Ball(3)); //series.Add(new Parallelepiped(1,2,2)); //series.Add(new Cone(2,3,3)); //for (int i=0; i < series.Size(); ++i) //std::cout << series[i]->SurfaceArea() << std::endl; return 0; } Код:
//Parallelepiped.h #pragma once #include "Body.h" class Parallelepiped : public Body { public: Parallelepiped(double x, double y, double z); virtual double SurfaceArea() const override; virtual double Volume() const override; virtual std::ostream &Print(std::ostream &out) const; public: double m_x; double m_y; double m_z; }; Код:
//Parallelepiped.cpp #include "pch.h" #include "Parallelepiped.h" #include "Body.h" #include <iostream> Parallelepiped::Parallelepiped(double x, double y, double z) : m_x(x) , m_y(y) , m_z(z) { } double Parallelepiped::SurfaceArea() const { return 2*(m_x + m_y + m_z); } double Parallelepiped::Volume() const { return m_x * m_y * m_z; } std::ostream& Parallelepiped::Print(std::ostream& out) const { return out << "Parallelepiped: x=" << m_x << ", y=" << m_y << ", z=" << m_z; } Код:
//Cone.h #pragma once #include "Body.h" class Cone : public Body { public: Cone(double x, double y, double z); virtual double SurfaceArea() const override; virtual double Volume() const override; virtual std::ostream &Print(std::ostream &out) const; public: double r; double l; double h; }; Код:
//Cone.cpp #include "pch.h" #include "Body.h" #include <iostream> #include "Cone.h" Cone::Cone(double x, double y, double z) : r(x) , l(z) , h(z) { } double Cone::SurfaceArea() const { return 3, 14 * r*(r+l); } double Cone::Volume() const { return 0,3*3,14*r*r*h; } std::ostream& Cone::Print(std::ostream& out) const { return out << "Cone: r=" << r << ", l=" << l << ", h=" << h; } Код:
//Body.h #pragma once #include <iostream> class Body { public: virtual ~Body() = default; virtual double SurfaceArea() const = 0; virtual double Volume() const = 0; virtual std::ostream& Print(std::ostream& out) const = 0; }; Код:
//Ball.h #include "Body.h" #pragma once class Ball : public Body { public: Ball(double x, double y, double z); virtual double SurfaceArea() const override; virtual double Volume() const override; virtual std::ostream &Print(std::ostream &out) const; public: double r; }; Код:
//Ball.cpp #include "pch.h" #include "Body.h" #include <iostream> #include "Ball.h" Ball::Ball(double x, double y, double z) : r(x) { } double Ball::SurfaceArea() const { return 3,14*r*r; } double Ball::Volume() const { return 3,14*1,3*r*r; } std::ostream& Ball::Print(std::ostream& out) const { return out << "Ball: r=" << r; } Код:
//Series.h(который не получился с реализацией size*(); #pragma once #include "Body.h" #include <iostream> class Series { public: Series(size_t cap) : m_bodies(new Body *[cap]) { } ~Series() { for (int i = 0; i < m_sz; ++i) delete m_bodies[i]; delete[] m_bodies; } void Add(Body* body) { m_bodies[m_sz++] = body; } size_t Size() const; Body* operator[](size_t idx) { return m_bodies[idx]; } protected: Body **m_bodies; size_t m_sz = 0; }; |
24.02.2020, 20:07 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
На форуме ранее создавались топики которые так или иначе похожи на ваш Java. Абстрактные типы данных: список, стек, очередь Глобалы и классы С++ Классы |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|