Здравствуйте. Нужно добавить класс 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, но не понял, что пихать в реализацию функции 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;
};
Буду очень благодарен если поможете.