www.gusucode.com > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序 > 《C++高级语言程序设计》PPT及全书例子源代码-源码程序/code/C++例题程序/第6章/s6_19/smain6_19.cpp
//Download by http://www.NewXing.com //文件名:smain6_19.cpp //异常基本结构及执行过程,注意体会异常的执行顺序 #include <iostream> using namespace std; void MyFunc( void ); class CMyException //定义异常类 { public: CMyException(){}; ~CMyException(){}; const char *ShowExceptionReson() const //显示异常原因 { return "Exception in CMyException class."; } }; class CDoctorDemo //定义一个工作类,用以显示其执行与异常抛出的顺序 { public: CDoctorDemo(); ~CDoctorDemo(); }; CDoctorDemo::CDoctorDemo() { cout << "Constructing CDoctorDemo." << endl; } CDoctorDemo::~CDoctorDemo() { cout << "Destructing CDoctorDemo." << endl; } //异常也可以多层封装,例如:在MyFunC()中封装throw、try、catch机制 //在这里捕获相关,异常,然后在其调用层再捕获它不能够捕获的异常 //本实例程序,只在main()中进行了异常捕获处理 void MyFunc() { CDoctorDemo D; cout << "In MyFunc(). Throwing CMyException exception." << endl; throw CMyException(); //抛出异常 } int main() { cout << "In main." << endl; try //用try封装可能会出现异常的代码 { cout << "In try block, calling MyFunc()." << endl; MyFunc(); } catch( CMyException E ) //一路捕获并处理异常 { cout << "In catch handler." << endl; cout << "Caught CMyException exception type: "; cout << E.ShowExceptionReson() << endl; } catch( char *str ) //二路捕获并处理异常 { cout << "Caught some other exception: " << str << endl; } cout << "Back in main. Execution resumes here." << endl; return 0; }