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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2022, 10:42   #1
bamboo.rice
Новичок
Джуниор
 
Регистрация: 28.04.2022
Сообщений: 2
По умолчанию Сделать со списками

сделать списки из подклассов.....не понятно как делать...
Помогите пожалуйста..

Задание к программе:
Написать программу, в которой описана иерархия классов: геометрические
фигуры. Реализовать методы вычисления площади и
периметра фигуры. Продемонстрировать работу всех методов классов, предоставив
пользователю выбор типа фигуры для демонстрации.

Код:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <locale>
using namespace std;
class Figure {
public:
    virtual double Perimetr() = 0;
    virtual double Area() = 0;
    virtual void Print() = 0;
    virtual void Read() = 0;
};
class ellipse : public Figure {  //класс "Эллипс"
private:
    double _b, _a, _P, _S;
public:
    ellipse(double b, double a, double P, double S)//конструктор
    {
        _a = a; //большая полуось эллипса
        _b = b; //малая полуось эллипса
        _P = P; //периметр
        _S = S; //площадь
    }
    ellipse(const ellipse& c)// конструктор копирования
    {
        _a = c._a;
        _b = c._b;
        _P = c._P;
        _S = c._S;
    }
    double Perimetr() override {
        _P = (4 * ((3.14f * _b * _a)+(_a-_b)/(_a+_b)));
        return _P;
    }
    double Area() override {
        _S = 3.14f * _b * _a;
        return _S;
    }
    void Read() override {
        cout << "Введите длину большой полуоси эллипса: a= ";
        cin >> _a;
        cout << "Введите длину малой полуоси эллипса: b= ";
        cin >> _b;
    }
    void Print() override {
        cout << "Периметр эллипса равен: Р= " << _P << endl;
        cout << "Площадь эллипса равна: S= " << _S << endl;
    }
};
class square : public Figure { //класс "Квадрат"
private:
    double _a1, _P, _S;
public:
    square(double a1, double P, double S)//конструктор
    {
        _a1 = a1; //сторона
        _P = P; //периметр
        _S = S; //площадь
    }
    square(const square& c)//конструктор копирования
    {
        _a1 = c._a1;
        _P = c._P;
        _S = c._S;
    }
    double Perimetr() override {
        _P = 4 * _a1;
        return _P;
    }
    double Area() override {
        _S = _a1 * _a1;
        return _S;
    }
    void Read() override {
        cout << "Введите сторону квадрата: a1= ";
        cin >> _a1;
    }
    void Print() override {
        cout << "Периметр квадрата равен: Р= " << _P << endl;
        cout << "Площадь квадрата равна: S= " << _S << endl;
    }
};
class trapezoid : public Figure {  //класс "Трапеция"
private:
    double _a2, _b2, _c2, _d2, _h2, _P, _S;
public:
    trapezoid(double a2, double b2, double c2, double d2, double h2, double P, double S)
    {
        _a2 = a2;  //первое основание трапеции
        _b2 = b2; //второе основание трапеции
        _c2 = c2; // первая боковая сторона 
        _d2 = d2; //вторая боковая сторона
        _P = P; //периметр
        _S = S; //площадь
    }
    trapezoid(const trapezoid& c)//конструктор копирования
    {
        _a2 = c._a2;
        _b2 = c._b2;
        _c2 = c._c2;
        _d2 = c._d2;
        _h2 = c._h2;
        _P = c._P;
        _S = c._S;
    }
    double Perimetr() override {
        _P = (_a2 + _b2 + _c2 + _d2);
        return _P;
    }
    double Area() override {
        _S = (0.5 * (_a2 + _b2) * _h2);
        return _S;
    }
    void Read() override {
        cout << "Введите длину первого основания трапеции: a2= ";
        cin >> _a2;
        cout << "Введите длину второго основания трапеции: b2= ";
        cin >> _b2;
        cout << "Введите длину первой боковой стороны трапеции: с2= ";
        cin >> _c2;
        cout << "Введите длину второй боковой стороны трапеции: d2= ";
        cin >> _d2;
        cout << "Введите высоту трапеции: h2= ";
        cin >> _h2;
    }
    void Print() override {
        cout << "Периметр трапеции равен: Р= " << _P << endl;
        cout << "Площадь трапеции равна: S= " << _S << endl;
    }
};
void menu(const char** list, int num)
{
    for (int i = 0; i < num; i++)
    {
        printf("Введите %d, чтобы %s\n", i, list[i]);
    }
}
int main() {
    setlocale(LC_ALL, "Russian");
    char prov;
    double a = 0;
    double b = 0;
    double a1 = 0;
    double a2 = 0;
    double b2 = 0;
    double c2 = 0;
    double d2 = 0;
    double h = 0;
    double h2 = 0;
    double P = 0;
    double S = 0;
    do {
        const char* list[3];
        list[0] = "работать с эллипсом";
        list[1] = "работать с трапецией";
        list[2] = "работать с квадратом";
        Figure* f = new ellipse(a, b, P, S);
        Figure* g = new square(a1, P, S);
        Figure* k = new trapezoid(a2, b2,h2, c2, P, S, d2);
        char l;
        menu(list, 3);
        rewind(stdin);
        l = getchar();
        switch (l)
        {
        case '0':
        {
            f->Read();
            f->Area();
            f->Perimetr();
            f->Print();
            delete f;
            break;
        }
        case '1':
        {
            k->Read();
            k->Area();
            k->Perimetr();
            k->Print();
            delete k;
            break;
        }
        case '2':
        {
            g->Read();
            g->Area();
            g->Perimetr();
            g->Print();
            delete g;
            break;
        }
        }
        cout << "Введите 0, если хотите завершить работу программы или 1, для продолжения работы:" << endl;
        cin >> prov;
        while ((prov != '0') && (prov != '1'))
        {
            rewind(stdin);
            cout << "Ошибка, введите заново:";
            cin >> prov;
        }
    } while (prov == '1');
    return 0;
}
bamboo.rice вне форума Ответить с цитированием
Старый 07.05.2022, 12:25   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от bamboo.rice Посмотреть сообщение
не понятно как делать
Код:
std::vector<std::unique_ptr<Figure>> list;
Алексей1153 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со списками Anastasea_ Помощь студентам 0 12.02.2017 22:57
Работа со списками Ти6ка Общие вопросы C/C++ 0 22.04.2015 18:50
c++. Работа со списками megavolt91 Помощь студентам 0 14.06.2009 21:31
Работа со списками. radist Паскаль, Turbo Pascal, PascalABC.NET 4 07.05.2007 00:05