-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWorkerClass.h
161 lines (132 loc) · 3.84 KB
/
WorkerClass.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
//
// Created by 贾智超 on 2024/7/20.
//
#ifndef WORKERCLASS_H
#define WORKERCLASS_H
#include <iostream>
#include <string>
#include <memory>
class Person {
public:
Person() = default;
virtual ~Person() = default;
virtual void ShowNumber() = 0;
virtual void ShowName() = 0;
virtual void ShowSpace() = 0;
virtual void ShowDuty() = 0;
virtual void write(std::ostream& os) const = 0;
virtual void read(std::istream& is) = 0;
void ChangeNumber(const int n) { number = n; }
void ChangeName(const std::string& Name) { name = Name; }
std::string Name() const { return name; }
int Number() const { return number; }
static std::unique_ptr<Person> deserialize(std::istream& is);
protected:
enum workerkind { Worker = 1, Manager = 2, Boss = 3 };
private:
int number{}; // 员工编号
std::string name{}; // 员工姓名
};
class Worker : public Person {
public:
Worker() = default;
explicit Worker(std::istream& is) {
int n;
std::string Name;
is >> n >> Name;
ChangeNumber(n);
ChangeName(Name);
}
Worker(int n, const std::string& Name) {
ChangeNumber(n);
ChangeName(Name);
}
static std::unique_ptr<Worker> fromStream(std::istream& is) {
int n;
std::string Name;
is >> n >> Name;
return std::make_unique<Worker>(n, Name);
}
void ShowNumber() override ;
void ShowName() override ;
void ShowSpace() override ;
void ShowDuty() override ;
void write(std::ostream& os) const override {
os << static_cast<int>(Person::Worker) << ' ' << Number() << ' ' << Name() << '\n';
// 检查输出是否成功
if (!os) {
std::cerr << "Error writing to stream." << std::endl;
}
}
void read(std::istream& is) override ;
~Worker() override = default;
};
class Manager : public Person {
public:
Manager() = default;
explicit Manager(std::istream& is) {
int n;
std::string Name;
is >> n >> Name;
ChangeNumber(n);
ChangeName(Name);
}
Manager(int n, const std::string& Name) {
ChangeNumber(n);
ChangeName(Name);
}
static std::unique_ptr<Manager> fromStream(std::istream& is) {
int n;
std::string Name;
is >> n >> Name;
return std::make_unique<Manager>(n, Name);
}
void ShowNumber() override ;
void ShowName() override ;
void ShowSpace() override ;
void ShowDuty() override ;
void write(std::ostream& os) const override {
os << static_cast<int>(Person::Manager) << ' ' << Number() << ' ' << Name() << '\n';
// 检查输出是否成功
if (!os) {
std::cerr << "Error writing to stream." << std::endl;
}
}
void read(std::istream& is) override ;
~Manager() override = default;
};
class Boss : public Person {
public:
Boss() = default;
explicit Boss(std::istream& is) {
int n;
std::string Name;
is >> n >> Name;
ChangeNumber(n);
ChangeName(Name);
}
Boss(int n, const std::string& Name) {
ChangeNumber(n);
ChangeName(Name);
}
static std::unique_ptr<Boss> fromStream(std::istream& is) {
int n;
std::string Name;
is >> n >> Name;
return std::make_unique<Boss>(n, Name);
}
void ShowNumber() override ;
void ShowName() override ;
void ShowSpace() override ;
void ShowDuty() override ;
void write(std::ostream& os) const override {
os << static_cast<int>(Person::Boss) << ' ' << Number() << ' ' << Name() << '\n';
// 检查输出是否成功
if (!os) {
std::cerr << "Error writing to stream." << std::endl;
}
}
void read(std::istream& is) override ;
~Boss() override = default;
};
#endif //WORKERCLASS_H