fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Point { double x, y; };
  5. class Shape
  6. {
  7. public:
  8. Point* arc;
  9. char Id;
  10. virtual void info() = 0;
  11. virtual ~Shape() {}
  12. static Shape* createShape(char);
  13. virtual int getArea() { return 0; }
  14. };
  15.  
  16. class Rectangle : public Shape
  17. {
  18. public:
  19. void info() { cout << "Четырехугольник" << endl; }
  20. Rectangle() { Id = 'R';
  21. arc = new Point[4];
  22. cout << "Вершина 1"; cin >> arc[0].x;/*... */ }
  23. int getArea() { return 4; }
  24. ~Rectangle() { delete[] arc; }
  25. };
  26.  
  27. class Triangle : public Shape
  28. {
  29. public:
  30. void info() { cout << "Треугольник" << endl; }
  31. };
  32.  
  33. class Octagon : public Shape
  34. {
  35. public:
  36. void info() { cout << "Восьмиугольник" << endl; }
  37. };
  38.  
  39. //Фабричныйметод
  40. Shape* Shape::createShape(char cd)
  41. {
  42. Shape* sh = 0;
  43. switch (cd)
  44. {
  45. case 'T':
  46. sh = new Triangle(); break;
  47. case 'R':
  48. sh = new Rectangle(); break;
  49. case 'O':
  50. sh = new Octagon(); break;
  51. default: break;
  52. }
  53. return sh;
  54. }
  55.  
  56. int main()
  57. {
  58. setlocale(LC_ALL, "Russian");
  59. Shape* p1 = 0;
  60. char T;
  61. cout << "Тип? ";
  62. cin >> T;
  63. p1 = Shape::createShape(T);
  64. if (!p1) return 0; p1->info();
  65. p1->getArea();
  66. delete p1;
  67. return 0;
  68. }
Success #stdin #stdout 0s 4364KB
stdin
Standard input is empty
stdout
Тип?