C++标准程序库异常处理

写在前面:本文章来自于在学习过程中的总结,供大家参考。因水平有限,博客中难免会有不足,恳请大佬们不吝赐教!

相关文章:
[C++系列]小白的C++入门教程
C++异常处理基础


一、标准异常

C++标准定义了一组类,用于报告在标准库中的函数遇到的问题。标准库异常类定义在四个头文件中。

  1. exception头文件定义了最擦汗功能键的异常类,它的类名时exception。这个类通常是所哟有标准异常类的根基类。
  2. stdexcept偷吻缉拿定义了几种常见的异常类。
  3. new头文件中定义了bad_alloc异常类型,提供因无法分配内存而new抛出的异常。
  4. type_info头文件定义了bad_cast异常类型。
    标准程序库异常处理
    实例:
#include <iostream>
#include <cmath>
#include <stdexcept>
using namespace std;

double area(double a, double b, double c)throw(invalid_argument)
{
	//判断三角形边长是否为正
	if (a <= 0 || b <= 0 || c <= 0)
	{
		throw invalid_argument("the side length should be positive");
	}
	//判断三角形是否满足三角不等式
	if (a + b <= c || b + c <= a || a + c <= b)
	{
		throw invalid_argument("the side length should fit the triangle inequation");
	}
	//由Heron公式计算三角形面积
	double s = (a + b + c) / 2;
	return sqrt(s * (s - a) * (s - b) * (s - c));
}
int main()
{
	double a, b, c;
	cin >> a >> b >> c;
	try
	{
		double s = area(a, b, c);	//尝试计算三角形面积
		cout << "Area = " << s << endl;
	}
	catch (exception &e)
	{
		cout << "Error:" << e.what() << endl;
	}
	return 0;
}

输出:
运行结果1:
3 4 5
Area = 6
运行结果2:
0 5 5
Error:the side length should be positive
运行结果3:
1 2 4
Error:the side length should fit the triangle inequation

二、异常规范

如果函数不捕捉异常,它至少应该提醒程序员:对函数的任何调用都有可能抛出异常。如存在可能抛出的异常,但函数定义未捕捉,应该在异常规范中列出那些异常类型。该函数声明展示了一个异常规范:
double area(double a, double b, double c)throw(invalid_argument);

异常规范的几种情况:

void someFunction() throw(DivideByZero,OtherException);
//DivideByZero或OtherException类型的异常会被正常处理
//至于其他任何异常,如抛出后未在函数主体中捕捉,就终止程序

void someFunction() throw();
//空异常列表:如抛出任何未在函数主体中捕捉的异常,就终止程序

void someFunction() ;
//正常处理所有类型的所有异常

注意:派生类中的异常规范
在派生类中重定义或重写函数定义时,它应具有和基类一样的异常规范,或至少应该在新的异常规范中给出基类异常规范的一个子集。


由于水平有限,本博客难免会有不足,恳请大佬们不吝赐教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值