C++学的太少,一天连发三篇日志,记录C++学习的基础知识。今天师兄让我使用catch try处理程序的异常,但是不会,有点丢人,只能慢慢学习了。
throw就是抛出异常,通常会有条件,如果某个条件出现了,那么throw,抛出异常,throw后面是某一类的对象。
try里面是极有可能出现异常的代码,如果满足了触发throw的条件,就会throw,然后catch就是紧着着处理这个异常,通常catch后紧接着某一类。
#include<iostream> //包含头文件
#include<stdlib.h>
using namespace std;
double fuc(double x, double y) //定义函数
{
if(y==0)
{
throw y; //除数为0,抛出异常
}
return x/y; //否则返回两个数的商
}
void main()
{
double res;
try //定义异常
{
res=fuc(4,0);
res=fuc(2,3);
cout<<"The result of x/y is : "<<res<<endl;
//出现异常
}
catch(double) //捕获并处理异常
{
cerr<<"error of dividing zero.\n";
exit(1); //异常退出程序
}
}
上面的程序,当除数为0时,会触发异常处理,那么结果如下图所示:
可以看到,输出结果是一段字符串,有点像跳转语句。后面的fun(2,3)也没有执行。
#include <iostream>
using namespace std;
class ExceptionClass
{
char* name;
public:
ExceptionClass( char* name="default name")
{
cout<<"Construct "<<name<<endl;
this->name = name;
}
~ExceptionClass()
{
cout<<"Destruct "<<name<<endl;
}
void mythrow()
{
//这里才是真正的throw,抛出一个对象。
throw ExceptionClass("my throw");
}
};
void main()
{
ExceptionClass e("Test");
try
{
e.mythrow();
}
catch(...)//其它错误异常
{
cout<<"*********"<<endl;
}
}
catch(...)是为了防止某些想不到的异常,catch 后面紧跟着是类的名称,即使声明了某一对象,也不会分配空间。直接上结果: