
代號:
頁次:
-
三、針對下列 C++程式碼,請修正程式碼行數 58「Job jobs ...」的錯誤及修
正錯誤後正確執行之輸出;並請說明 Employee 類別 candidate 資料的運作
原理,以及程式碼行數 61「e1.arrange()」程式執行之運作流程。(25 分)
02
03
04
05
06
07
08
09
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
#include <string>
#include <map>
using namespace std;
class Job {
public:
Job(string _name, int _sa, int _sk) {
name = _name;
salary = _sa;
skill = _sk;
employee_name = "None";
}
string getName() { return name; }
int getSalary() { return salary; }
int getSkill() { return skill; }
void hire(string _name) { employee_name = _name; }
void print() { cout << name <<"::"<<employee_name<<endl; }
private:
string name;
int salary;
int skill;
string employee_name;
};
class Employee {
public:
Employee(string _name, int _sa, int _sk) {
name = _name;
salary = _sa;
skill = _sk;
}
void match(Job *m) {
if ((m->getSalary() >= salary) && (skill >= m->getSkill())) {
candidate[m->getName()] = m;
}
}
void arrange() {
int score = 0;
Job *jb, *jb_wanted;
for (auto c = candidate.begin(); c != candidate.end(); ++c) {
jb = c->second; // get value of MAP
if (jb->getSalary() >= score) {
score = jb->getSalary();
jb_wanted = jb;
}
}
jb_wanted->hire(name);
}
string getName() { return name; }
private:
string name;
int salary;
int skill;
map <string, Job *> candidate;
};
int main() {
Employee e1("Tom", 37, 85);
Employee e2("John", 35, 75);
Job jobs[] ={ new Job("RD", 45, 75), new Job("Sales", 35, 70),
new Job("Manager", 55, 80)};
for (int i=0; i<3; i++) e1.match(jobs[i]);