Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 24.02.2020, 20:07   #1 (permalink)
Kveda
Новичок
 
Регистрация: 24.02.2020
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Абстрактные классы

Здравствуйте. Нужно добавить класс 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;
};
Kveda вне форума   Ответить с цитированием

Старый 24.02.2020, 20:07
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На форуме ранее создавались топики которые так или иначе похожи на ваш

Java. Абстрактные типы данных: список, стек, очередь
Глобалы и классы
С++ Классы

Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:59.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.