1 #include <iostream>
2 #include <string>
3
4 using namespace std;
5
6 class Base
7 {
8 };
9
10 class Exception : public Base
11 {
12 int m_id;
13 string m_desc;
14 public:
15 Exception(int id, string desc)
16 {
17 m_id = id;
18 m_desc = desc;
19 }
20
21 int id() const
22 {
23 return m_id;
24 }
25
26 string description() const
27 {
28 return m_desc;
29 }
30 };
31
32
33 /*
34 假设: 当前的函数式第三方库中的函数,因此,我们无法修改源代码
35
36 函数名: void func(int i)
37 抛出异常的类型: int
38 -1 ==》 参数异常
39 -2 ==》 运行异常
40 -3 ==》 超时异常
41 */
42 void func(int i)
43 {
44 if( i < 0 )
45 {
46 throw -1;
47 }
48
49 if( i > 100 )
50 {
51 throw -2;
52 }
53
54 if( i == 11 )
55 {
56 throw -3;
57 }
58
59 cout << "Run func..." << endl;
60 }
61
62 void MyFunc(int i)
63 {
64 try
65 {
66 func(i);
67 }
68 catch(int i)
69 {
70 switch(i)
71 {
72 case -1:
73 throw Exception(-1, "Invalid Parameter");
74 break;
75 case -2:
76 throw Exception(-2, "Runtime Exception");
77 break;
78 case -3:
79 throw Exception(-3, "Timeout Exception");
80 break;
81 }
82 }
83 }
84
85 int main(int argc, char *argv[])
86 {
87 try
88 {
89 MyFunc(11);c
90 }
91 catch(const Exception& e)
92 {
93 cout << "Exception Info: " << endl;
94 cout << " ID: " << e.id() << endl;
95 cout << " Description: " << e.description() << endl;
96 }
97 catch(const Base& e)
98 {
99 cout << "catch(const Base& e)" << endl;
100 }
101
102 return 0;
103 }