-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobject.h
83 lines (67 loc) · 1.84 KB
/
object.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
72
73
74
75
76
77
78
79
80
81
82
83
#pragma once
#include <string>
#include <cmath>
#include "common.h"
#include "date.h"
namespace direction
{
enum Direction {
forward,
reverse
};
} // namespace direction
using namespace direction;
class Object {
public:
Object() {};
~Object() = default;
virtual Object& SetName(const std::string& name) = 0;
virtual Object& SetRadius(int radius) = 0;
virtual int Time(const Date& date) = 0;
virtual const Position GetPosition(const Date& date) = 0;
virtual const std::string GetName() = 0;
virtual Object* GetParent() = 0;
virtual const Distance GetDistance() = 0;
private:
};
class Star : public Object {
public:
Star() : Object() {}
Star& SetPosition(const Position& position);
Star& SetName(const std::string& name) override;
Star& SetRadius(int radius) override;
int Time(const Date& date) override;
const Position GetPosition(const Date& date) override;
const std::string GetName() override;
Object* GetParent() override;
const Distance GetDistance() override;
private:
std::string name_;
int radius_ = 0;
Position pos_ = { 0,0 };
};
class Planet : public Object {
public:
Planet() : Object() {}
Planet& SetName(const std::string& name) override;
Planet& SetSystem(Object* parent);
Planet& SetRadius(int radius) override;
Planet& SetDistanceKm(int distance);
Planet& SetDistanceAu(double distance);
Planet& SetSiderial(double siderial);
Planet& SetEquinox(const std::string& equinox);
Planet& SetDirection(const Direction direction);
int Time(const Date& date) override;
const Position GetPosition(const Date& date) override;
const std::string GetName() override;
Object* GetParent() override;
const Distance GetDistance() override;
private:
std::string name_;
Object* parent_ = nullptr;
int radius_ = 0;
Distance distance_;
double siderial_ = 0;
Date equinox_ = Date(1, 1, 2000);
Direction direction_ = forward;
};