• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Абстрактные классы

  • Автор темы Автор темы Kveda
  • Дата начала Дата начала

Kveda

Ученик
Регистрация
24 Фев 2020
Сообщения
1
Реакции
0
Баллы
0
Абстрактные классы

Здравствуйте. Нужно добавить класс Series(динамический массив), чтобы он записывал данные о фигуре и выводил на экран.Я уже пытался сделать, свой образец предоставлю тоже, но не понял, что писать в реализации Size(). C++. Условие задачи вот: Создать абстрактный класс Body. На его основе реализовать классы Parallelepiped (прямоугольный параллелепипед), Cone (конус) и Ball (шар) с возможностью вычисления площади поверхности и объема.
Создать класс 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;
};
 
Назад
Сверху