c++的异常处理

本文详细介绍了C++中的异常处理机制,包括基本的异常处理、自定义异常类的创建以及标准库中的异常处理方式。通过实例展示了如何在代码中捕获和处理异常,强调了异常处理在程序错误检测中的重要性,并提供了自定义异常类以增强错误信息的记录。此外,还探讨了`throw`、`try`、`catch`关键字的使用以及`throw()`和`noexcept`的声明方式。
摘要由CSDN通过智能技术生成

系列文章目录


文章目录


前言

异常处理在编写c++程序中更好的发现错误;


一、基本的异常处理

  • 异常处理机制:暂缓问题处理,不在当前函数中处理,在他调用者中处理

  • 什么是异常,任何东西都可以认为是异常,错误只是异常的一种

  • 异常一旦被抛出,不做处理,如果引发错误,会调用默认abort终止程序

  • 捕获和处理异常

    • throw 抛出异常,(可以理解为返回值,值是任何类型都可以,使我们处理异常一个参照)

    • try(检查,捕获)和catch(处理异常)

int fiand(int y, int i)
{
	if (i == 0)
		throw 10;//抛出异常
	return y / i;
}
int main()
{
	try {
           fiand(12, 0);//注意这里如果有异常抛出就会直接跳转到catch处不会再往下继续执行
         cout<<"无异常"<<endl;//如果上一段处有异常被抛出此段就不会被执行
         }//检查与捕获异常
	catch (int u) //这里是一个隐藏的传参操作//根据异常的类型来处理异常
    {
		cout << u<<endl;
	}
    catch(const char*)
    {
        cout<<u<<endl;
    }
	
	return 0;
}

 

不存在异常的描述

  • throw ()      //起标识作用表示这个函数不存在异常的抛出就是throw,如果有也不会报错

  • noexcept     //与throw基本相同但如果再有noexcept标识的函数中出现throw就会报错导致编译不通过;

使用方法:

void A(int y) throw()
{
    cout<<"不存在异常"<<endl;
    //即使出现throw也不会报错
}


void B(int y) noexcept
{
    cout << "新的描述:不存在抛出异常" << endl;
	//throw 0;  编译不过,一旦说明没有异常操作,就不能抛出
}

二、自定义异常类

一般为了更好的观察记录异常一般会自定义一个异常类;这个类专门用来当作throw抛出的异常,这样可以记录下更多的异常信息并且比单纯的字符串与数字更好处理;

例子:
 

#include<string>
#include <iostream> 
using namespace std;
class Error//专门传递错误信息
{
public:
	Error(const char*p):str(p){}
	string c_str()//接口函数
	{
		return str;
	}
protected:
	string str;
};
int fiand(int y, int i)
{
	if (i == 0)
		throw Error("除数不能为零");
	return y / i;
}
int main()
{
	try { fiand(12, 0); }
	catch (int ) {
		cout <<"错误";
	}
	catch (Error i)//使用了隐藏传参操作
	{
		cout << i.c_str();
	}
	
	return 0;
}

 

三、标注库中的异常处理

标准库中是使用了继承来逐一分析问题的如图所示

 

我们也可以通过继承标准库中的类容来创建自己的异常类这样就可以使用标准中已经定义好的函数;但是这样作要对标准库足够熟悉;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值