写在前面:本文章来自于在学习过程中的总结,供大家参考。因水平有限,博客中难免会有不足,恳请大佬们不吝赐教!
相关文章:
[C++系列]小白的C++入门教程
C++异常处理基础
一、标准异常
C++标准定义了一组类,用于报告在标准库中的函数遇到的问题。标准库异常类定义在四个头文件中。
- exception头文件定义了最擦汗功能键的异常类,它的类名时exception。这个类通常是所哟有标准异常类的根基类。
- stdexcept偷吻缉拿定义了几种常见的异常类。
- new头文件中定义了bad_alloc异常类型,提供因无法分配内存而new抛出的异常。
- 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() ;
//正常处理所有类型的所有异常
注意:派生类中的异常规范
在派生类中重定义或重写函数定义时,它应具有和基类一样的异常规范,或至少应该在新的异常规范中给出基类异常规范的一个子集。
由于水平有限,本博客难免会有不足,恳请大佬们不吝赐教!