-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCalculatorLucio.h
83 lines (72 loc) · 1.89 KB
/
CalculatorLucio.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
enum Digit {ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE};
enum Operation {ADDITION, SUBTRACTION, DIVISION, MULTIPLICATION, SQUARE_ROOT, PERCENTAGE, NONE};
enum Control {CLEAR, RESET, DECIMAL_SEPARATOR, MEMORY_READ_CLEAR, MEMORY_ADDITION, MEMORY_SUBTRACTION, EQUAL};
enum Signal {POSITIVE, NEGATIVE};
class Display{
public:
virtual void add(Digit ) = 0;
virtual void setDecimalSeparator() = 0;
virtual void setSignal(Signal ) = 0;
virtual void clear() = 0;
};
class Receiver{
public:
virtual void receiveDigit(Digit ) = 0;
virtual void receiveOperation(Operation ) = 0;
virtual void receiveControl(Control ) = 0;
};
class Cpu: public Receiver{
protected:
Display* display;
public:
void setDisplay(Display*);
virtual void receiveDigit(Digit ) = 0;
virtual void receiveOperation(Operation ) = 0;
virtual void receiveControl(Control ) = 0;
};
class Key; // Preset for early reference
class Keyboard: public Receiver{
protected:
Cpu* cpu;
public:
void setCpu(Cpu* );
virtual void addKey(Key* ) = 0;
virtual void receiveDigit(Digit ) = 0;
virtual void receiveOperation(Operation ) = 0;
virtual void receiveControl(Control ) = 0;
};
class Calculator{
public:
virtual void setDisplay(Display* ) = 0;
virtual void setCpu(Cpu* ) = 0;
virtual void setKeyboard(Keyboard* ) = 0;
};
class Key{
protected:
Receiver* receiver;
public:
void setReceiver(Receiver* );
virtual void press() = 0;
};
class KeyDigit: public Key{
protected:
Digit digit;
public:
KeyDigit(Digit );
void press();
};
class KeyOperation: public Key{
protected:
Operation operation;
public:
KeyOperation(Operation );
void press();
};
class KeyControl: public Key{
protected:
Control control;
public:
KeyControl(Control );
void press();
};