Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 12 / Example_polymorphism / Shape.cpp
diff options
context:
space:
mode:
1 files changed, 52 insertions, 0 deletions
-rw-r--r--Sem. 12/Example_polymorphism/Shape.cpp52
diff --git a/Sem. 12/Example_polymorphism/Shape.cpp b/Sem. 12/Example_polymorphism/Shape.cpp
new file mode 100644
index 0000000..27bb9e9
--- /dev/null
+++ b/Sem. 12/Example_polymorphism/Shape.cpp
@@ -0,0 +1,52 @@
+#include "Shape.h"
+
+Shape::Shape(size_t pointsCount) : pointsCount(pointsCount)
+{
+ points = new point[pointsCount]; // [0,0], [0,0]....
+}
+
+void Shape::copyFrom(const Shape& other)
+{
+ points = new point[other.pointsCount];
+
+ for (int i = 0; i < other.pointsCount; i++)
+ points[i] = other.points[i];
+}
+void Shape::free()
+{
+ delete[] points;
+}
+
+Shape::Shape(const Shape& other)
+{
+ copyFrom(other);
+}
+Shape& Shape::operator= (const Shape& other)
+{
+ if (this != &other)
+ {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+}
+Shape::~Shape()
+{
+ free();
+}
+
+const Shape::point& Shape::getPointAtIndex(size_t index) const
+{
+ if (index >= pointsCount)
+ throw std::exception("Invalid point index!");
+
+ return points[index];
+}
+
+void Shape::setPoint(size_t pointIndex, int x, int y)
+{
+ if (pointIndex >= pointsCount)
+ throw std::exception("Invalid point index!");
+
+ points[pointIndex] = point(x, y);
+}