From bae67b429a63aba3341d0af3174a3c99d9f7d6ba Mon Sep 17 00:00:00 2001 From: Andrey Kassaev Date: Mon, 4 Mar 2024 13:36:08 +0400 Subject: [PATCH] init --- .gitignore | 2 ++ Main.cpp | 26 +++++++++++++++++++++ Rectangle.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++ Rectangle.h | 22 +++++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 .gitignore create mode 100644 Main.cpp create mode 100644 Rectangle.cpp create mode 100644 Rectangle.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6df1069 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*/* +OOP* \ No newline at end of file diff --git a/Main.cpp b/Main.cpp new file mode 100644 index 0000000..336a417 --- /dev/null +++ b/Main.cpp @@ -0,0 +1,26 @@ +#pragma once +#include "Rectangle.h" +#include + + +int main() { + + Rectangle rectangle1(10, 5); + Rectangle rectangle2(7, 6); + + /*Rectangle rectangle1(4, 6); + Rectangle rectangle2(2, 3);*/ + + //Usage of overloaded unary minus + Rectangle invertedRectangle = -rectangle1; + std::cout << "Inverted Rectangle:\n"; + invertedRectangle.print(); + + //Usage of overloaded binary minus + double symDiffArea = rectangle1 - rectangle2; + std::cout << "Symmetric Difference Area = " << symDiffArea << "\n"; + + system("pause"); + + return 0; +}; \ No newline at end of file diff --git a/Rectangle.cpp b/Rectangle.cpp new file mode 100644 index 0000000..5ba05ba --- /dev/null +++ b/Rectangle.cpp @@ -0,0 +1,65 @@ +#include "Rectangle.h" + +double Rectangle::smallest(double x, double y) { + return (x < y) ? x : y; +} + +double Rectangle::biggest(double x, double y) { + return (x > y) ? x : y; +} + +double Rectangle::symmetricDifference(Rectangle& rectangle1, Rectangle& rectangle2) { + + double differenceX = rectangle1.x - rectangle2.x; + double differenceY = rectangle1.y - rectangle2.y; + + + if (differenceX < 0 || differenceY < 0) { + + double tmpRectangle1 = \ + (biggest(rectangle1.x, rectangle2.x) - smallest(rectangle1.x, rectangle2.x)) * \ + smallest(rectangle1.y, rectangle2.y); + + double tmpRectangle2 = \ + (biggest(rectangle1.y, rectangle2.y) - smallest(rectangle1.y, rectangle2.y)) * \ + smallest(rectangle1.x, rectangle2.x); + + double area = tmpRectangle1 + tmpRectangle2; + + return area; + + } + else { + //one rectangle is in inside another one + //biggest rect area - smallest rect area + + double area = \ + biggest(rectangle1.x, rectangle2.x) * biggest(rectangle1.y, rectangle2.y) - \ + smallest(rectangle1.x, rectangle2.x) * smallest(rectangle1.y, rectangle2.y); + return area; + } +}; + +Rectangle::Rectangle(double x, double y) { + this->x = x; + this->y = y; +}; + +Rectangle::~Rectangle() { +}; + +Rectangle Rectangle::operator - () { + return Rectangle( + this->x * -1, + this->y * -1 + ); +}; + +double operator-(Rectangle& rectangle1, Rectangle& rectangle2) { + return Rectangle::symmetricDifference(rectangle1, rectangle2); +}; + +void Rectangle::print() { + std::cout << "X = " << this->x << "\n"; + std::cout << "Y = " << this->y << "\n"; +}; \ No newline at end of file diff --git a/Rectangle.h b/Rectangle.h new file mode 100644 index 0000000..a851a91 --- /dev/null +++ b/Rectangle.h @@ -0,0 +1,22 @@ +#pragma once +#include +#include + +class Rectangle +{ +private: + static double smallest(double x, double y); + static double biggest(double x, double y); + static double symmetricDifference(Rectangle& rectangle1, Rectangle& rectangle2); + +public: + double x, y; + + Rectangle(double x, double y); + ~Rectangle(); + void print(); + + Rectangle operator - (); + friend double operator-(Rectangle& rectangle1, Rectangle& rectangle2); + +}; \ No newline at end of file