#include <iostream>
using namespace std;
struct Point { double x, y; };
class Shape
{
public:
Point* arc;
char Id;
virtual void info() = 0;
virtual ~Shape() {}
static Shape* createShape(char);
virtual int getArea() { return 0; }
};
class Rectangle : public Shape
{
public:
void info() { cout << "Четырехугольник" << endl; }
Rectangle() { Id = 'R';
arc = new Point[4];
cout << "Вершина 1"; cin >> arc[0].x;/*... */ }
int getArea() { return 4; }
~Rectangle() { delete[] arc; }
};
class Triangle : public Shape
{
public:
void info() { cout << "Треугольник" << endl; }
};
class Octagon : public Shape
{
public:
void info() { cout << "Восьмиугольник" << endl; }
};
//Фабричныйметод
Shape* Shape::createShape(char cd)
{
Shape* sh = 0;
switch (cd)
{
case 'T':
sh = new Triangle(); break;
case 'R':
sh = new Rectangle(); break;
case 'O':
sh = new Octagon(); break;
default: break;
}
return sh;
}
int main()
{
setlocale(LC_ALL, "Russian");
Shape* p1 = 0;
char T;
cout << "Тип? ";
cin >> T;
p1 = Shape::createShape(T);
if (!p1) return 0; p1->info();
p1->getArea();
delete p1;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFBvaW50IHsgZG91YmxlIHgsIHk7IH07CmNsYXNzIFNoYXBlCnsKcHVibGljOgoJUG9pbnQqIGFyYzsKCWNoYXIgSWQ7Cgl2aXJ0dWFsIHZvaWQgaW5mbygpID0gMDsKCXZpcnR1YWwgflNoYXBlKCkge30KCXN0YXRpYyBTaGFwZSogY3JlYXRlU2hhcGUoY2hhcik7Cgl2aXJ0dWFsIGludCBnZXRBcmVhKCkgeyByZXR1cm4gMDsgfQp9OwoKY2xhc3MgUmVjdGFuZ2xlIDogcHVibGljIFNoYXBlCnsKcHVibGljOgoJdm9pZCBpbmZvKCkgeyBjb3V0IDw8ICLQp9C10YLRi9GA0LXRhdGD0LPQvtC70YzQvdC40LoiIDw8IGVuZGw7IH0KCVJlY3RhbmdsZSgpIHsgSWQgPSAnUic7CglhcmMgPSBuZXcgUG9pbnRbNF07Cgljb3V0IDw8ICLQktC10YDRiNC40L3QsCAxIjsgY2luID4+IGFyY1swXS54Oy8qLi4uICovIH0KCWludCBnZXRBcmVhKCkgeyByZXR1cm4gNDsgfQoJflJlY3RhbmdsZSgpIHsgZGVsZXRlW10gYXJjOyB9Cn07CgpjbGFzcyBUcmlhbmdsZSA6IHB1YmxpYyBTaGFwZQp7CnB1YmxpYzoKCXZvaWQgaW5mbygpIHsgY291dCA8PCAi0KLRgNC10YPQs9C+0LvRjNC90LjQuiIgPDwgZW5kbDsgfQp9OwoKY2xhc3MgT2N0YWdvbiA6IHB1YmxpYyBTaGFwZQp7CnB1YmxpYzoKCXZvaWQgaW5mbygpIHsgY291dCA8PCAi0JLQvtGB0YzQvNC40YPQs9C+0LvRjNC90LjQuiIgPDwgZW5kbDsgfQp9OwoKLy/QpNCw0LHRgNC40YfQvdGL0LnQvNC10YLQvtC0ClNoYXBlKiBTaGFwZTo6Y3JlYXRlU2hhcGUoY2hhciBjZCkKewoJU2hhcGUqIHNoID0gMDsKCXN3aXRjaCAoY2QpCgl7CgljYXNlICdUJzoKCQlzaCA9IG5ldyBUcmlhbmdsZSgpOyBicmVhazsKCWNhc2UgJ1InOgoJCXNoID0gbmV3IFJlY3RhbmdsZSgpOyBicmVhazsKCWNhc2UgJ08nOgoJCXNoID0gbmV3IE9jdGFnb24oKTsgYnJlYWs7CglkZWZhdWx0OiBicmVhazsKCX0KCXJldHVybiBzaDsKfQoKaW50IG1haW4oKQp7CglzZXRsb2NhbGUoTENfQUxMLCAiUnVzc2lhbiIpOwoJU2hhcGUqIHAxID0gMDsKCWNoYXIgVDsKCWNvdXQgPDwgItCi0LjQvz8gICI7CgljaW4gPj4gVDsKCXAxID0gU2hhcGU6OmNyZWF0ZVNoYXBlKFQpOwoJaWYgKCFwMSkgcmV0dXJuIDA7IHAxLT5pbmZvKCk7CglwMS0+Z2V0QXJlYSgpOwoJZGVsZXRlIHAxOwoJcmV0dXJuIDA7Cn0=