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