#include "stdafx.h"
#include <iostream.h>
#include <string.h>

class DivideZero
{
public:
    //
带参构造
    DivideZero( const char* pStr )
    {
        strcpy(szMessage, pStr);
    }
    //
拷贝构造
    DivideZero(const DivideZero &Obj)
    {
        strcpy(szMessage,Obj.szMessage);
    }
    char szMessage[32];
};

void fun()
{   
    //
编译错误  编译期语法错误
    //
逻辑错误  编译期语法正确,运行时出错

    int i = 10;
    int j = 0;
    double z = 0;
   
    try
    {
       //
抛出异常,下面就不执行了,直接跳到对应的catch语句块中去
        throw DivideZero("
0异常");
       
        if ( j == 0 )
        {
            throw DivideZero("
0异常");
        }
        cout << i / j << endl;
    }
// int
int& 只能写一个
//     catch (int)
//     {
//         cout << "int
异常发生!" << endl;
//     }
    catch (char*)
    {
        cout << "char*
异常发生!" << endl;
    }
    //
形参名可写可不写
    catch (int&)
    {
        cout << "int&
异常发生!" << endl;
    }
    //
这里刚好有一个上边抛出异常对应的类型接收,所以直接跳到这里来
    catch (DivideZero &theDiv)
    {
        cout << theDiv.szMessage << endl;
    }
   //...
所有的异常类型都进入此语句块处理
    catch (...)
    {
        cout << "
异常发生!" << endl;
    }
}

int main(int argc, char* argv[])
{
    try
    {
        fun();
    }
    //
上面的fun函数体内已经对相应的异常做出处理,所以这里就不会执行了
    catch ( DivideZero )
    {
        cout << "DivideZero
异常发生" << endl;
    }
    catch (...)
    {
        cout << "
异常发生" << endl;
    }
   
    return 0;
}

posted on 2010-02-09 18:37  o无尘o  阅读(147)  评论(0编辑  收藏  举报