1 char grade(int score)
2 {
3 if( 0<score && score < 60 )
4 return 'd';
5 else if ( score>=60 && score < 70 )
6 return 'c';
7 else if ( score>=70 && score < 80 )
8 return 'b';
9 else if ( score>=80 && score<=100)
10 return 'a';
11 else
12 return '\0';
13 }
2 {
3 if( 0<score && score < 60 )
4 return 'd';
5 else if ( score>=60 && score < 70 )
6 return 'c';
7 else if ( score>=70 && score < 80 )
8 return 'b';
9 else if ( score>=80 && score<=100)
10 return 'a';
11 else
12 return '\0';
13 }
1 char grade(int score)
2 {
3 int s = score/10;
4 switch(s)
5 {
6 case 0:
7 case 1:
8 case 2:
9 case 3:
10 case 4:
11 case 5:
12 return 'a'
13 case 6:
14 return 'c';
15 case 7:
16 return 'b';
17 case 8:
18 case 9:
19 case 10:
20 return 'a';
21 }
22 return '\0';
23 }
2 {
3 int s = score/10;
4 switch(s)
5 {
6 case 0:
7 case 1:
8 case 2:
9 case 3:
10 case 4:
11 case 5:
12 return 'a'
13 case 6:
14 return 'c';
15 case 7:
16 return 'b';
17 case 8:
18 case 9:
19 case 10:
20 return 'a';
21 }
22 return '\0';
23 }
暂且不论代码是否修改正确,其实代码从一个转入另一个并没有改变多少内涵,都是学C语言太久,受到结构化思想的影响,代码之间的耦合性还是非常的强,代码还可以做下面的修改,虽然代码量增加很多,也复杂了很多,但是如果要在中间嵌入某个功能,相比较而言,会更加方便,同时估计也是很多面试官想要从你那儿得到的东西:
1
class score
2
{
3
public:
4
score(void);
5
public:
6
virtual ~score(void);
7
public:
8
int sc;
9
};
10![](/Images/OutliningIndicators/None.gif)
11![](/Images/OutliningIndicators/None.gif)
12
class ScoreHandle
13
{
14
public:
15
virtual char grade(score* s) = 0;
16
17
void nextHandle(ScoreHandle* n)
18
{
19
next = n;
20
}
21
protected:
22
ScoreHandle* next;
23
};
24![](/Images/OutliningIndicators/None.gif)
25
class NotPass : public ScoreHandle
26
{
27
public:
28
virtual char grade(score* s)
29
{
30
if( s->sc < 60 )
31
return 'd';
32
return next->grade(s);
33
}
34
};
35![](/Images/OutliningIndicators/None.gif)
36![](/Images/OutliningIndicators/None.gif)
37
class MidPass : public ScoreHandle
38
{
39
public:
40
virtual char grade(score* s)
41
{
42
if ( s->sc >=60 && s->sc < 70)
43
{
44
return 'c';
45
}
46
return next->grade(s);
47
}
48
};
49![](/Images/OutliningIndicators/None.gif)
50
class WellPass : public ScoreHandle
51
{
52
public:
53
virtual char grade(score* s)
54
{
55
if ( s->sc>=70 && s->sc<80 )
56
{
57
return 'b';
58
}
59
return next->grade(s);
60
}
61
};
62![](/Images/OutliningIndicators/None.gif)
63
class GreatPass : public ScoreHandle
64
{
65
public:
66
virtual char grade(score *s)
67
{
68
if ( s->sc>=80 && s->sc<=100 )
69
{
70
return 'a';
71
}
72
return next->grade(s);
73
}
74
};
75![](/Images/OutliningIndicators/None.gif)
76
class NotExistPass : public ScoreHandle
77
{
78
public:
79
virtual char grade(score* s)
80
{
81
return '\0';
82
}
83
};
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
24
![](/Images/OutliningIndicators/None.gif)
25
![](/Images/OutliningIndicators/None.gif)
26
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
34
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
35
![](/Images/OutliningIndicators/None.gif)
36
![](/Images/OutliningIndicators/None.gif)
37
![](/Images/OutliningIndicators/None.gif)
38
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
49
![](/Images/OutliningIndicators/None.gif)
50
![](/Images/OutliningIndicators/None.gif)
51
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
61
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
62
![](/Images/OutliningIndicators/None.gif)
63
![](/Images/OutliningIndicators/None.gif)
64
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
74
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
75
![](/Images/OutliningIndicators/None.gif)
76
![](/Images/OutliningIndicators/None.gif)
77
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
83
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
在你需要测试的前面,做下面的一些初始化工作:
1
ScoreHandle *sh;
2![](/Images/OutliningIndicators/None.gif)
3
NotPass not;
4
MidPass mid;
5
WellPass well;
6
GreatPass great;
7
NotExistPass notExist;
8![](/Images/OutliningIndicators/None.gif)
9
not.nextHandle(&mid);
10
mid.nextHandle(&well);
11
well.nextHandle(&great);
12
great.nextHandle(¬Exist);
13![](/Images/OutliningIndicators/None.gif)
14
sh = ¬
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
后就可以很放心的分级你的分数段了:
1 score s;
2 s.sc = 20;
3 cout << sh->grade(&s) << endl;
4
5 s.sc = 65;
6 cout << sh->grade(&s) << endl;
这个才是OOP的思想。
好了,自己也很好的回顾了一下职责链的基本功能,希望网友也能够理解职责链的功能。
2 s.sc = 20;
3 cout << sh->grade(&s) << endl;
4
5 s.sc = 65;
6 cout << sh->grade(&s) << endl;
这个才是OOP的思想。
好了,自己也很好的回顾了一下职责链的基本功能,希望网友也能够理解职责链的功能。