Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 14
diff options
context:
space:
mode:
Commit8cf1283a4ffb9fe1901c29c087fa376de82726af (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2022-02-19 23:30:52 +0200
Committer
 angeld55 <angel_dimitriev@abv.bg>
2022-02-19 23:30:52 +0200
Filesabdfe6bf526100dcce87a88563100e02adf7605e /Sem. 14
Object-oriented_programming_FMI-8cf1283a4ffb9fe1901c29c087fa376de82726af.tar
Object-oriented_programming_FMI-8cf1283a4ffb9fe1901c29c087fa376de82726af.tar.gz
Object-oriented_programming_FMI-8cf1283a4ffb9fe1901c29c087fa376de82726af.zip
Parentd73a7ec225516657dec74472a0491330e9999217 (diff)
clean up
diff --git a/Sem. 14/Collection/ShapesCollection.cpp b/Sem. 14/Collection/ShapesCollection.cpp
deleted file mode 100644
index 5bd2711..0000000
--- a/Sem. 14/Collection/ShapesCollection.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#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() const
-{
- for (int i = 0; i < collection.size(); i++)
- std::cout << collection[i]->getArea() << " " << std::endl;
-}
-void ShapesCollection::printPers() const
-{
- 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();
-}
diff --git a/Sem. 14/Collection/ShapesCollection.h b/Sem. 14/Collection/ShapesCollection.h
deleted file mode 100644
index 92c7deb..0000000
--- a/Sem. 14/Collection/ShapesCollection.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "../Shapes/Circle.h"
-#include "../Shapes/Rectangle.h"
-#include "../Shapes/Triangle.h"
-#include "../Shapes/Rhombus.h"
-#include "../Shapes/Square.h"
-#include <vector>
-
-class ShapesCollection
-{
- std::vector<Shape*> 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() const;
- void printPers() const;
-
- ShapesCollection() = default;
- ShapesCollection(const ShapesCollection& other);
- ShapesCollection& operator=(const ShapesCollection& other);
-
- ~ShapesCollection();
-};
diff --git a/Sem. 14/README.md b/Sem. 14/README.md
deleted file mode 100644
index acf6382..0000000
--- a/Sem. 14/README.md
+++ /dev/null
@@ -1,157 +0,0 @@
-
-# Колекции от обекти в полиморфна йерархия. Копиране и триене.
-## Колекция.
-
-Можем да реализираме колекция от различни типове (но с общ базов клас), чрез масив от указатели. Указателите трябва да са от типа на базовия клас.
-
-```c++
-struct Fruit
-{
- virtual void printColor() const = 0;
-
- virtual ~Fruit(){}
-};
-
-struct Apple
-{
- void printColor() const override
- {
- std::cout << "Red or green! "<<std::endl;
- }
-};
-
-struct Orange
-{
- void printColor() const override
- {
- std::cout << "Orange! "<<std::endl;
- }
-
-};
-
-struct Lemon
-{
- Lemon(size_t sourness) : sourness(sourness){}
-
- size_t sourness;
- void printColor() const override
- {
- std::cout << "Yellow! "<<std::endl;
- }
-};
-
-class FruitStore
-{
-private:
- Fruit** fruits;
- size_t capacity;
- size_t count;
-
- void copyFrom(const FruitStore& other);
- void free();
-
-public:
- FruitStore();
- FruitStore(const FruitStore&);
- FruitStore& operator=(const FruitStore&);
- ~FruitStore();
-
- void addApple();
- void addOrange();
- void addLemon(size_t sourness);
-};
-
-void FruitStore::addApple()
-{
- fruits[count++] = new Apple();
-}
-
-void FruitStore::addOrange()
-{
- fruits[count++] = new Orange();
-}
-void FruitStore::addLemon(size_t sourness)
-{
- fruits[count++] = new Lemon(sourness);
-}
- ```
-
-## Триене
-Понеже имаме виртуален деструктор в базовия клас, не се интересуваме в колекцията какви са обектите, които трием.
-```c++
-void FruitStore::free()
-{
- for(int i = 0; i < count; i++)
- delete fruits[i];
- delete[] fruits;
-}
- ```
-
-## Копиране
-Искаме да реализираме копиране на колекцията.
-Това трябва да стане без да нарушаваме абстракцията - искаме обеките да се копират без да се налага да запитваме за техния тип.
-За това дефинираме виртуална функция clone, която ще връща копие на обекта. Тази функция я разписваме във всеки от наследниците.
-
-```c++
-
-struct Fruit
-{
- virtual void printColor() const = 0;
- virtual ~Fruit(){}
-
- virtual Fruit* clone() const = 0; //!
-};
-
-struct Apple
-{
- void printColor() const override
- {
- std::cout << "Red or green! "<<std::endl;
- }
- Fruit* clone() const override
- {
- return new Apple(*this);
- }
-
-};
-
-struct Orange
-{
- void printColor() const override
- {
- std::cout << "Orange! "<<std::endl;
- }
-
- Fruit* clone() const override
- {
- return new Apple(*this);
- }
-};
-
-struct Lemon
-{
- Lemon(size_t sourness) : sourness(sourness){}
-
- size_t sourness;
- void printColor() const override
- {
- std::cout << "Yellow! "<<std::endl;
- }
- Fruit* clone() const override
- {
- return new Lemon(*this);
- }
-};
- ```
-От тук копирането става тривиално:
-```c++
-void FruitStore::copyFrom(const FruitStore& other)
-{
- fruits = new Fruit*[other. capacity];
- for(int i = 0; i < other.count; i++)
- fruits[i] = other.fruits[u]->clone();
- count = other.count;
- capacity = other.capacity;
-}
- ```
-
diff --git a/Sem. 14/Shapes/Circle.cpp b/Sem. 14/Shapes/Circle.cpp
deleted file mode 100644
index 3f4ac98..0000000
--- a/Sem. 14/Shapes/Circle.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "Circle.h"
-
-const double PI = 3.1415;
-Circle::Circle(double x, double y, double radius) : Shape(1), radius(radius)
-{
- setPoint(0, x, y);
-}
-
-double Circle::getArea() const
-{
- return PI * radius * radius;
-}
-double Circle::getPer() const
-{
- return 2 * PI * radius;
-}
-
-Shape* Circle::clone() const
-{
- Circle* copy = new Circle(*this);
- return copy;
-} \ No newline at end of file
diff --git a/Sem. 14/Shapes/Circle.h b/Sem. 14/Shapes/Circle.h
deleted file mode 100644
index 84380fa..0000000
--- a/Sem. 14/Shapes/Circle.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma once
-#include "Shape.h"
-
-class Circle : public Shape
-{
- double radius;
-
-public:
- Circle(double x, double y, double radius);
-
- double getArea() const override;
- double getPer() const override;
-
- Shape* clone() const override;
-}; \ No newline at end of file
diff --git a/Sem. 14/Shapes/Rectangle.cpp b/Sem. 14/Shapes/Rectangle.cpp
deleted file mode 100644
index 9e16b01..0000000
--- a/Sem. 14/Shapes/Rectangle.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "Rectangle.h"
-
-Rectangle::Rectangle(double x1, double y1, double x3, double y3) : Shape(4)
-{
- setPoint(0, x1, y1);
- setPoint(1, x1, y3);
- setPoint(2, x3, y3);
- setPoint(3, x3, y1);
-}
-double Rectangle::getArea() const
-{
- Shape::point p0 = getPointAtIndex(0);
- Shape::point p1 = getPointAtIndex(1);
- Shape::point p3 = getPointAtIndex(3);
-
- return p0.getDist(p1) * p0.getDist(p3);
-
-}
-double Rectangle::getPer() const
-{
- Shape::point p0 = getPointAtIndex(0);
- Shape::point p1 = getPointAtIndex(1);
- Shape::point p3 = getPointAtIndex(3);
-
- return 2*(p0.getDist(p1) + p0.getDist(p3));
-}
-
-Shape* Rectangle::clone() const
-{
- Rectangle* copy = new Rectangle(*this);
- return copy;
-} \ No newline at end of file
diff --git a/Sem. 14/Shapes/Rectangle.h b/Sem. 14/Shapes/Rectangle.h
deleted file mode 100644
index baa4cb5..0000000
--- a/Sem. 14/Shapes/Rectangle.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#pragma once
-#include "Shape.h"
-
-class Rectangle : virtual public Shape
-{
-
-public:
- Rectangle(double x1, double y1, double x3, double y3);
- double getArea() const override;
- double getPer() const override;
-
- Shape* clone() const override;
-}; \ No newline at end of file
diff --git a/Sem. 14/Shapes/Rhombus.cpp b/Sem. 14/Shapes/Rhombus.cpp
deleted file mode 100644
index 62a3e8c..0000000
--- a/Sem. 14/Shapes/Rhombus.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "Rhombus.h"
-
-Rhombus::Rhombus(double x1, double y1, double x2, double y2) : Shape(4)
-{
- setPoint(0, x1, y1);
- setPoint(1, x2, y2);
- double sideLength = getPointAtIndex(0).getDist(getPointAtIndex(1));
-
- setPoint(2, x2 + sideLength, y2);
- setPoint(3, x1 + sideLength, y1);
-}
-
-double Rhombus::getArea() const
-{
- return 0.5 * getPointAtIndex(0).getDist(getPointAtIndex(2)) * getPointAtIndex(1).getDist(getPointAtIndex(3));
-}
-double Rhombus::getPer() const
-{
- return 4 * getPointAtIndex(0).getDist(getPointAtIndex(1));
-}
-Shape* Rhombus::clone() const
-{
- Rhombus* copy = new Rhombus(*this);
- return copy;
-} \ No newline at end of file
diff --git a/Sem. 14/Shapes/Rhombus.h b/Sem. 14/Shapes/Rhombus.h
deleted file mode 100644
index 24e5a5b..0000000
--- a/Sem. 14/Shapes/Rhombus.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-#include "Shape.h"
-
-class Rhombus : virtual public Shape
-{
-public:
- Rhombus(double x1, double y1, double x2, double y2);
-
- double getArea() const override;
- double getPer() const override;
- Shape* clone() const override;
-}; \ No newline at end of file
diff --git a/Sem. 14/Shapes/Shape.cpp b/Sem. 14/Shapes/Shape.cpp
deleted file mode 100644
index 7bc24ef..0000000
--- a/Sem. 14/Shapes/Shape.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#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, double x, double y)
-{
- if (pointIndex >= pointsCount)
- throw std::exception("Invalid point index!");
-
- points[pointIndex] = point(x, y);
-}
diff --git a/Sem. 14/Shapes/Shape.h b/Sem. 14/Shapes/Shape.h
deleted file mode 100644
index caf7919..0000000
--- a/Sem. 14/Shapes/Shape.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#pragma once
-#include <iostream>
-
-class Shape // Abstract class - no instances of Shape are allowed!
-{
-protected:
- struct point
- {
- point() :x(0), y(0){}
- point(double x, double y) :x(x), y(y){}
- double x;
- double y;
- double getDist(const point& other) const
- {
- int dx = x - other.x;
- int dy = y - other.y;
-
- return sqrt(dx*dx + dy*dy);
- }
- };
- const point& getPointAtIndex(size_t index) const;
-private:
- point* points;
- size_t pointsCount;
-
- void copyFrom(const Shape& other);
- void free();
-
-
-public:
- Shape(size_t pointsCount);
-
- Shape(const Shape& other);
- Shape& operator=(const Shape& other);
- virtual ~Shape(); //!!!!!!
-
- void setPoint(size_t pointIndex, double x, double y);
-
- virtual double getArea() const = 0; //pure virtual
- virtual double getPer() const = 0; // pure virtual
-
- virtual Shape* clone() const = 0; //
-}; \ No newline at end of file
diff --git a/Sem. 14/Shapes/Square.cpp b/Sem. 14/Shapes/Square.cpp
deleted file mode 100644
index 555c340..0000000
--- a/Sem. 14/Shapes/Square.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "Square.h"
-
-Square::Square(double x, double y, double sideLength) : Rectangle(x, y, x + sideLength, y - sideLength), Rhombus(x, y, x, y - sideLength), Shape(4)
-{}
-
-double Square::getArea() const
-{
- return Rhombus::getArea();
-}
-double Square::getPer() const
-{
- return Rectangle::getPer();
-};
-
-Shape* Square::clone() const
-{
- Square* copy = new Square(*this);
- return copy;
-} \ No newline at end of file
diff --git a/Sem. 14/Shapes/Square.h b/Sem. 14/Shapes/Square.h
deleted file mode 100644
index fd78bd8..0000000
--- a/Sem. 14/Shapes/Square.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "Rhombus.h"
-#include "Rectangle.h"
-
-class Square : public Rhombus, public Rectangle
-{
-public:
- Square(double x, double y, double sideLength);
-
- double getArea() const override;
- double getPer() const override;
-
- Shape* clone() const override;
-}; \ No newline at end of file
diff --git a/Sem. 14/Shapes/Triangle.cpp b/Sem. 14/Shapes/Triangle.cpp
deleted file mode 100644
index e13d685..0000000
--- a/Sem. 14/Shapes/Triangle.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "Triangle.h"
-
-Triangle::Triangle(double x1, double y1, double x2, double y2, double x3, double y3) : Shape(3)
-{
- setPoint(0, x1, y1);
- setPoint(1, x2, y2);
- setPoint(2, x3, y3);
-}
-double Triangle::getArea() const
-{
- Shape::point p1 = getPointAtIndex(0);
- Shape::point p2 = getPointAtIndex(1);
- Shape::point p3 = getPointAtIndex(2);
-
- return abs(p1.x*p2.y + p2.x*p3.y + p3.x*p1.y - p1.y * p2.x - p2.y*p3.x - p3.y*p1.x) / 2.00;
-}
-double Triangle::getPer() const
-{
- Shape::point p1 = getPointAtIndex(0);
- Shape::point p2 = getPointAtIndex(1);
- Shape::point p3 = getPointAtIndex(2);
-
- return p1.getDist(p2) + p2.getDist(p3) + p3.getDist(p1);
-}
-
-Shape* Triangle::clone() const
-{
- Triangle* copy = new Triangle(*this);
- return copy;
-} \ No newline at end of file
diff --git a/Sem. 14/Shapes/Triangle.h b/Sem. 14/Shapes/Triangle.h
deleted file mode 100644
index 3a53901..0000000
--- a/Sem. 14/Shapes/Triangle.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#include "Shape.h"
-
-class Triangle : public Shape
-{
-
-public:
- Triangle(double x1, double y1, double x2, double y2, double x3, double y3);
- double getArea() const override;
- double getPer() const override;
-
- Shape* clone() const override;
-}; \ No newline at end of file
diff --git a/Sem. 14/main.cpp b/Sem. 14/main.cpp
deleted file mode 100644
index 5d9401c..0000000
--- a/Sem. 14/main.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <iostream>
-#include "Collection/ShapesCollection.h"
-using namespace std;
-
-int main()
-{
- ShapesCollection s;
-
- s.addCircle(3, 4, 5);
- s.addTriangle(2, 3, 54, 3, 2, 1);
- s.addRectangle(1, 2, 3, 4);
- s.addRhombus(3, 2, 0, 0);
- s.addSquare(4, 4, 10);
-
- s.printAreas();
-}