diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7070a0e --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +# Variable declaration +CC= g++ +CFLAGS= -Iincludes +SOURCE= *.cpp +INCUDE= includes/*.hpp + + +.PHONY: all +all:debug release + +debug: $(SOURCE) $(INCLUDE) + $(CC) $(SOURCE) -g -o debug $(CFLAGS) +release: $(SOURCE) $(INCLUDE) + $(CC) $(SOURCE) -O3 -o release $(CFLAGS) + +.PHONY: clean +clean : + rm debug release diff --git a/includes/Circle.hpp b/includes/Circle.hpp new file mode 100644 index 0000000..81897e7 --- /dev/null +++ b/includes/Circle.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include "Shape.hpp" + +class Circle : public Shape +{ +public: + Circle(double r); + Circle(const Circle & other); + + double getArea() const; + double getPerimeter() const; + double getRadius() const; + void print() const; + +private: + Circle(); // doesn't allow to call default constructor + + double r_; +}; diff --git a/includes/Rectangle.hpp b/includes/Rectangle.hpp new file mode 100644 index 0000000..077aed1 --- /dev/null +++ b/includes/Rectangle.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include "Shape.hpp" + +class Rectangle : public Shape +{ +public: + Rectangle(double x, double y); + Rectangle(const Rectangle & other); + + double getArea() const; + double getPerimeter() const; + double getX() const; + double getY() const; + void print() const; + +private: + Rectangle(); + + double x_; + double y_; +}; diff --git a/includes/Shape.hpp b/includes/Shape.hpp new file mode 100644 index 0000000..d86bda6 --- /dev/null +++ b/includes/Shape.hpp @@ -0,0 +1,11 @@ +#pragma once + +class Shape +{ +public: + virtual ~Shape() {} + + virtual double getArea() const = 0; + virtual double getPerimeter() const = 0; + virtual void print() const; +}; diff --git a/includes/Square.hpp b/includes/Square.hpp new file mode 100644 index 0000000..676606b --- /dev/null +++ b/includes/Square.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "Rectangle.hpp" + +class Square : public Rectangle +{ +public: + Square(double x); + Square(const Square & other); + + double getArea(); + double getPerimeter(); + void print(); + +private: + double getY(); // should not have Y dimension + Square(); +};