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