1.为什么需要异常处理?
- 用 new 运算符动态分配空间时,空间不够导致无法分配;
- 访问数组元素时,下标越界;打开文件读取时,文件不存在。
- 访问了野指,出现内存错误等等 …
2.在c++ 中异常处理的方法??
利用try (测试) throw(抛出异常) catch(处理异常)
-
在c 语言 中异常处理的方法?? ? 利用 if 语句判断操作是否正确。 -
c/c++ 中异常处理的区别: ? c++ 中的处理能力更强,逻辑性更严谨,且系统中某些函数已经预定义了异常的抛出。如at,new 等等… -
语法: try {
用户需要执行的代码
}
catch(异常类型) {
异常处理代码
}
...
catch(异常类型) {
异常处理代码
}
-
例子: #include <iostream>
using namespace std;
int main()
{
try{
int *p = new int[0x0fffffffffffffff];
}
catch(...)
{
cout << "程序出现异常" << endl;
}
}
3.异常的抛出
当系统不会自动抛出异常时,用户就要手动抛出异常。
string a="hello";
try{
cout << a.at(1000000) << endl;
}catch(...)
{
cout << "代码出现异常" << endl;
}
try{
cout << a[1000000] << endl;
}catch(...){
cout << "代码异常2" << endl;
}
抛出异常语法:
throw 表达式;
例子:
#include <iostream>
using namespace std;
int main()
{
string a="hello";
try{
cout << a.at(1000000) << endl;
}catch(...)
{
cout << "代码出现异常" << endl;
}
try{
int size=1000000;
if(size >= 5)
{
throw "数组越界";
}
cout << a[size] << endl;
}catch(...){
cout << "代码异常2" << endl;
}
}
4.异常的类型捕捉
catch(…) : 可以捕捉任何的异常类型,拿不到异常的抛出数据
#include <iostream>
using namespace std;
class base
{
};
int main()
{
base a;
try{
throw a;
}
catch(int a)
{
cout << "int"<<a << endl;
}
catch(double a)
{
cout <<"double"<< a << endl;
}
catch(const char *a)
{
cout << "char *"<<a << endl;
}
catch(...)
{
cout << "其他异常" << endl;
}
}
5.系统预定义的异常类型
catch(exception &e)
{
cout << "其他异常" << e.what() << endl;
}
6.异常的再抛出
当一个函数出现异常的时候,抛出异常并,处理的的话,这个异常会继续往上抛出,直到处理为之!!
#include <iostream>
using namespace std;
void test()
{
try{
throw "抛出异常";
}
catch(const char *a){
cout << "输出异常:" << a << endl;
}
}
void test0()
{
throw "抛出异常";
}
void test1()
{
cout << "test1" << endl;
test0();
cout << "test endl" << endl;
}
int main()
{
try{
test1();
}
catch(...){
cout << "出现异常并未处理" << endl;
}
}
|