分数段代码改写——职责链
2009-03-10 23:02 ubunoon 阅读(326) 评论(0) 编辑 收藏 举报
很多公司在招聘的时候会给出一些代码,让面试者进行判断,下面是一个常见的分数段修改代码:
暂且不论代码是否修改正确,其实代码从一个转入另一个并没有改变多少内涵,都是学C语言太久,受到结构化思想的影响,代码之间的耦合性还是非常的强,代码还可以做下面的修改,虽然代码量增加很多,也复杂了很多,但是如果要在中间嵌入某个功能,相比较而言,会更加方便,同时估计也是很多面试官想要从你那儿得到的东西:
在你需要测试的前面,做下面的一些初始化工作:
后就可以很放心的分级你的分数段了:
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语言太久,受到结构化思想的影响,代码之间的耦合性还是非常的强,代码还可以做下面的修改,虽然代码量增加很多,也复杂了很多,但是如果要在中间嵌入某个功能,相比较而言,会更加方便,同时估计也是很多面试官想要从你那儿得到的东西:
1class score
2{
3public:
4 score(void);
5public:
6 virtual ~score(void);
7public:
8 int sc;
9};
10
11
12class ScoreHandle
13{
14public:
15 virtual char grade(score* s) = 0;
16
17 void nextHandle(ScoreHandle* n)
18 {
19 next = n;
20 }
21protected:
22 ScoreHandle* next;
23};
24
25class NotPass : public ScoreHandle
26{
27public:
28 virtual char grade(score* s)
29 {
30 if( s->sc < 60 )
31 return 'd';
32 return next->grade(s);
33 }
34};
35
36
37class MidPass : public ScoreHandle
38{
39public:
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
50class WellPass : public ScoreHandle
51{
52public:
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
63class GreatPass : public ScoreHandle
64{
65public:
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
76class NotExistPass : public ScoreHandle
77{
78public:
79 virtual char grade(score* s)
80 {
81 return '\0';
82 }
83};
2{
3public:
4 score(void);
5public:
6 virtual ~score(void);
7public:
8 int sc;
9};
10
11
12class ScoreHandle
13{
14public:
15 virtual char grade(score* s) = 0;
16
17 void nextHandle(ScoreHandle* n)
18 {
19 next = n;
20 }
21protected:
22 ScoreHandle* next;
23};
24
25class NotPass : public ScoreHandle
26{
27public:
28 virtual char grade(score* s)
29 {
30 if( s->sc < 60 )
31 return 'd';
32 return next->grade(s);
33 }
34};
35
36
37class MidPass : public ScoreHandle
38{
39public:
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
50class WellPass : public ScoreHandle
51{
52public:
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
63class GreatPass : public ScoreHandle
64{
65public:
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
76class NotExistPass : public ScoreHandle
77{
78public:
79 virtual char grade(score* s)
80 {
81 return '\0';
82 }
83};
在你需要测试的前面,做下面的一些初始化工作:
1 ScoreHandle *sh;
2
3 NotPass not;
4 MidPass mid;
5 WellPass well;
6 GreatPass great;
7 NotExistPass notExist;
8
9 not.nextHandle(&mid);
10 mid.nextHandle(&well);
11 well.nextHandle(&great);
12 great.nextHandle(¬Exist);
13
14 sh = ¬
2
3 NotPass not;
4 MidPass mid;
5 WellPass well;
6 GreatPass great;
7 NotExistPass notExist;
8
9 not.nextHandle(&mid);
10 mid.nextHandle(&well);
11 well.nextHandle(&great);
12 great.nextHandle(¬Exist);
13
14 sh = ¬
后就可以很放心的分级你的分数段了:
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的思想。
好了,自己也很好的回顾了一下职责链的基本功能,希望网友也能够理解职责链的功能。
/*
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */
*
* Copyright (c) 2011 Ubunoon.
* All rights reserved.
*
* email: netubu#gmail.com replace '#' to '@'
* http://www.cnblogs.com/ubunoon
* 欢迎来邮件定制各类验证码识别,条码识别,图像处理等软件
* 推荐不错的珍珠饰品,欢迎订购 * 宜臣珍珠(淡水好珍珠) */