diff options
1 files changed, 52 insertions, 0 deletions
| -rw-r--r-- | Sem. 12/Example_polymorphism/Shape.cpp | 52 |
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); +} |
