Website Summary Files Commits Branches @commit @diff @stats
path: root / Polymorphism / Shapes / ShapeCollection.cpp
diff options
context:
space:
mode:
Commit92e8d2a1aefce843e9635632cc13b9c512fea734 (patch)
Author
 Angeld55 <angel_dimitriev@abv.bg>
2020-05-20 03:04:17 +0300
Committer
 Angeld55 <angel_dimitriev@abv.bg>
2020-05-20 03:04:17 +0300
Files0f853ea7b9b5eb2a78c8fadff7c7ead659394d3e /Polymorphism/Shapes/ShapeCollection.cpp
Object-oriented_programming_FMI-92e8d2a1aefce843e9635632cc13b9c512fea734.tar
Object-oriented_programming_FMI-92e8d2a1aefce843e9635632cc13b9c512fea734.tar.gz
Object-oriented_programming_FMI-92e8d2a1aefce843e9635632cc13b9c512fea734.zip
Parent495fe9ae299e81c213161d992d05cc11a403a1d7 (diff)
fixed poly
1 files changed, 88 insertions, 0 deletions
-rw-r--r--Polymorphism/Shapes/ShapeCollection.cpp88
diff --git a/Polymorphism/Shapes/ShapeCollection.cpp b/Polymorphism/Shapes/ShapeCollection.cpp
new file mode 100644
index 0000000..8fcad3c
--- /dev/null
+++ b/Polymorphism/Shapes/ShapeCollection.cpp
@@ -0,0 +1,88 @@
+#include "ShapeCollection.h"
+
+ShapeCollection::ShapeCollection()
+{
+ count = 0;
+ capacity = 8;
+
+ data = new Shape*[capacity];
+}
+
+void ShapeCollection::AddCircle(int x1, int y1, int r)
+{
+ Circle* current = new Circle(x1, y1, r);
+ Add(current);
+
+}
+void ShapeCollection::AddTriagnle(int x1, int y1, int x2, int y2, int x3, int y3)
+{
+ Triangle* current = new Triangle(x1, y1, x2, y2, x3, y3);
+ Add(current);
+}
+void ShapeCollection::AddRect(int x1, int y1, int x2, int y2)
+{
+ Rectangle* current = new Rectangle(x1, y1, x2, y2);
+ Add(current);
+}
+void ShapeCollection::Add(Shape* currentShape)
+{
+ if (count == capacity)
+ Resize();
+ data[count++] = currentShape;
+}
+void ShapeCollection::Free()
+{
+ for (int i = 0; i < count; i++)
+ delete data[i];
+
+ delete[] data;
+}
+void ShapeCollection::CopyFrom(const ShapeCollection& other)
+{
+ data = new Shape*[other.count];
+ capacity = other.capacity;
+ count = other.count;
+ for (int i = 0; i < other.count; i++)
+ data[i] = other.data[i]->clone();
+
+}
+ShapeCollection::ShapeCollection(const ShapeCollection& other)
+{
+ CopyFrom(other);
+}
+ShapeCollection& ShapeCollection::operator = (const ShapeCollection& other)
+{
+ if (this != &other)
+ {
+ Free();
+ CopyFrom(other);
+ }
+ return *this;
+}
+ShapeCollection::~ShapeCollection()
+{
+ Free();
+}
+void ShapeCollection::Resize()
+{
+ Shape** temp = new Shape*[capacity * 2];
+ capacity *= 2;
+ for (int i = 0; i < count; i++)
+ temp[i] = data[i];
+ delete[] data;
+ data = temp;
+
+
+}
+void ShapeCollection::PrintAllAreas()
+{
+ for (int i = 0; i < count; i++)
+ std::cout << data[i]->getArea() << " ";
+ std::cout<<std::endl;
+}
+void ShapeCollection::PrintAllPers()
+{
+ for (int i = 0; i < count; i++)
+ std::cout << data[i]->getPer() << " ";
+ std::cout << std::endl;
+} \ No newline at end of file