-
Notifications
You must be signed in to change notification settings - Fork 1
/
abstractshape.h
71 lines (60 loc) · 1.9 KB
/
abstractshape.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef ABSTRACTSHAPE_H
#define ABSTRACTSHAPE_H
/** @file abstractshape.h
*
* @brief Абстрактный класс представления геометрической фигуры и класс ошибки неположительного значения координаты
* @author Pavel Zinin <[email protected]>
* @date 27 Nov 2014
*
*/
#include <iostream>
#include "vector.h"
#include <QPainter>
#include <QtWidgets>
namespace pashazz
{
/**
* @class AbstractShape
* @brief Абстрактная геометрическая фигура
*
* Это абстрактный класс, представляющий геометрическую фигуру. Вы должны наследоваться от этого класса
*/
class AbstractShape;
//Ошибка: неположительное число
struct NegativeValueException
{
NegativeValueException() = delete;
NegativeValueException(double val, const char * msg)
{
std::cerr << "runtime error: mon-positive value: " << val << " (" << msg << ")\n";
}
};
class AbstractShape
{
public:
virtual ~AbstractShape() {}
virtual void move(double dX, double dY)
{
move(Point2D(dX, dY));
}
virtual void move(const Point2D &delta) = 0;
virtual bool isInside(const Point2D &point) const = 0;
virtual void setCentre(Point2D centre)
{
m_centre = centre;
}
virtual void setCentre(double x, double y)
{
setCentre(Point2D(x, y));
}
virtual Point2D centre() const {return m_centre;}
//painting:
virtual void paint(QPainter *p) const = 0;
protected:
Point2D m_centre;
//constructor
AbstractShape(Point2D centre)
:m_centre(centre) {}
};
}
#endif // ABSTRACTSHAPE_H