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;
}