From cbe098fdaf6509b6a3c8bd33b3064d8f620dd58c Mon Sep 17 00:00:00 2001 From: angeld55 Date: Fri, 28 May 2021 16:45:24 +0300 Subject: sem 14 --- Sem. 14/Collection/ShapesCollection.cpp | 67 +++++++++++++++++++++++++++++++++ Sem. 14/Collection/ShapesCollection.h | 33 ++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 Sem. 14/Collection/ShapesCollection.cpp create mode 100644 Sem. 14/Collection/ShapesCollection.h (limited to 'Sem. 14/Collection') diff --git a/Sem. 14/Collection/ShapesCollection.cpp b/Sem. 14/Collection/ShapesCollection.cpp new file mode 100644 index 0000000..0fe828c --- /dev/null +++ b/Sem. 14/Collection/ShapesCollection.cpp @@ -0,0 +1,67 @@ +#include "ShapesCollection.h" + +void ShapesCollection::addCircle(double x, double y, double radius) +{ + Circle* ptr = new Circle(x, y, radius); + collection.push_back(ptr); +} +void ShapesCollection::addRectangle(double x1, double y1, double x3, double y3) +{ + Rectangle* ptr = new Rectangle(x1, y1, x3, y3); + collection.push_back(ptr); +} +void ShapesCollection::addTriangle(double x1, double y1, double x2, double y2, double x3, double y3) +{ + Triangle* ptr = new Triangle(x1, y1, x2, y2, x3, y3); + collection.push_back(ptr); +} +void ShapesCollection::addRhombus(double x1, double y1, double x2, double y2) +{ + collection.push_back(new Rhombus(x1, y1, x2, y2)); +} + +void ShapesCollection::addSquare(double x1, double y1, double sideLength) +{ + collection.push_back(new Square(x1, y1, sideLength)); +} + +void ShapesCollection::printAreas() +{ + for (int i = 0; i < collection.size(); i++) + std::cout << collection[i]->getArea() << " " << std::endl; +} +void ShapesCollection::printPers() +{ + for (int i = 0; i < collection.size(); i++) + std::cout << collection[i]->getPer() << " " << std::endl; +} + +void ShapesCollection::copyFrom(const ShapesCollection& other) +{ + for (int i = 0; i < other.collection.size(); i++) + collection.push_back(other.collection[i]->clone()); +} +void ShapesCollection::free() +{ + for (int i = 0; i < collection.size(); i++) + delete collection[i]; + collection.clear(); +} + +ShapesCollection::ShapesCollection(const ShapesCollection& other) +{ + copyFrom(other); +} +ShapesCollection& ShapesCollection::operator= (const ShapesCollection& other) +{ + if (this != &other) + { + free(); + copyFrom(other); + } + return *this; +} +ShapesCollection::~ShapesCollection() +{ + free(); +} \ No newline at end of file diff --git a/Sem. 14/Collection/ShapesCollection.h b/Sem. 14/Collection/ShapesCollection.h new file mode 100644 index 0000000..0a9638d --- /dev/null +++ b/Sem. 14/Collection/ShapesCollection.h @@ -0,0 +1,33 @@ +#include "../Shapes/Circle.h" +#include "../Shapes/Rectangle.h" +#include "../Shapes/Triangle.h" +#include "../Shapes/Rhombus.h" +#include "../Shapes/Square.h" +#include + +class ShapesCollection +{ + std::vector collection; + + void free(); + void copyFrom(const ShapesCollection& other); + +public: + + //factory + + void addCircle(double x, double y, double radius); + void addRectangle(double x1, double y1, double x3, double y3); + void addTriangle(double x1, double y1, double x2, double y2, double x3, double y3); + void addRhombus(double x1, double y1, double x2, double y2); + void addSquare(double x1, double y2, double sideLength); + + void printAreas(); + void printPers(); + + ShapesCollection() = default; + ShapesCollection(const ShapesCollection& other); + ShapesCollection& operator=(const ShapesCollection& other); + + ~ShapesCollection(); +}; \ No newline at end of file -- cgit v1.3.1-23-gd82d