Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2020, 18:53   #1
Kveda
Новичок
Джуниор
 
Регистрация: 24.02.2020
Сообщений: 1
По умолчанию Абстрактные классы.

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Абстрактные Классы C++ EnJoYs Помощь студентам 1 09.01.2017 10:13
Абстрактные классы Vadik(R) Visual C++ 2 23.02.2014 01:56
Абстрактные классы KuckaMAXHATKA Общие вопросы C/C++ 1 13.12.2011 23:29
Абстрактные классы romantik2011 PHP 2 27.07.2011 10:36
С++ Абстрактные классы Jane-sad Помощь студентам 2 14.10.2010 14:19