Part12 异常处理 12.3标准库程序异常处理

标准异常类的继承关系

C++标准库各种异常类所代表的异常

标准异常类的基础
  exception:标准程序库异常类的公共基类
  logic_error表示可以在程序中被预先检测到的异常
    如果小心地编写程序,这类异常能够避免
  runtime_error表示难以被预先检测的异常

//例12-3 三角形面积计算
//编写一个计算三角形面积的函数,函数的参数为三角形三边边长a、b、c,可以用Heron公式计算:
#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 || c + a <= b)
        throw invalid_argument("the side length should fit the triangle inequation");
    double s = (a + b + c) / 2;
    return sqrt(s * (s - a) * (s - b) * (s - c));
}
int main(){
    double a, b, c;
    cout << "Please input the side lengths of a triangle: ";
    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;
}

原文地址:https://www.cnblogs.com/leosirius/p/8270846.html

时间: 2024-10-09 04:22:56

Part12 异常处理 12.3标准库程序异常处理的相关文章

Python学习笔记12:标准库之对象序列化(pickle包,cPickle包)

计算机的内存中存储的是二进制的序列. 我们能够直接将某个对象所相应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),然后将文本流存入到文件里. 因为Python在创建对象时,要參考对象的类定义,所以当我们从文本中读取对象时,必须在手边要有该对象的类定义,才干懂得怎样去重建这一对象. 从文件读取时,对于Python的内建(built-in)对象 (比方说整数.词典.表等等),因为其类定义已经加载内存,所以不须要我们再在程序中定义类. 但对于用户自行定义的对象,就必需要先定义类,

Python学习笔记12:标准库之对象序列化

计算机的内存中存储的是二进制的序列. 我们可以直接将某个对象所对应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),然后将文本流存入到文件中. 由于Python在创建对象时,要参考对象的类定义,所以当我们从文本中读取对象时,必须在手边要有该对象的类定义,才能懂得如何去重建这一对象. 从文件读取时,对于Python的内建(built-in)对象 (比如说整数.词典.表等等),由于其类定义已经载入内存,所以不需要我们再在程序中定义类. 但对于用户自行定义的对象,就必须要先定义类,

PipeCAD之管道标准库PipeStd

PipeCAD之管道标准库PipeStd [email protected] Key Words. PipeCAD, PipeStd, 管道设计软件,管件库 1. Introduction 前不久,两位老友徐总和毛总在上海浦东金桥的一茶一坐小聚,回想到几年前我们仨在那里聚会的情景.他们分别在A公司和I公司,我当时在做SPD的开发.在一起聊的话题也是关于设计软件的,当时也有一些思想碰撞的火花,想着做出一个什么软件,成为CEO,迎娶白富美,走上人生顶峰.结果几年过去,当年吹过的牛B,没有实现.其中有

PipeCAD之管道标准库PipeStd(2)

PipeCAD之管道标准库PipeStd(2) [email protected] Key Words. PipeCAD, PipeStd, 管道设计软件,管件库 1. Introduction 管道标准部件库程序PipeStd的主要用法与PDMS的Paragon模块类似,主要也是采用参数化的方式来表示管件.每种类型的管件Category包含三个集合:参数集Parameter Set.点集Point Set和形集Geometry Set.本文主要来介绍如何创建一个参数化的标准管件.如下图所示为一

C++ 异常机制分析(C++标准库定义了12种异常,很多大公司的C++编码规范也是明确禁止使用异常的,如google、Qt)

阅读目录 C++异常机制概述 throw 关键字 异常对象 catch 关键字 栈展开.RAII 异常机制与构造函数 异常机制与析构函数 noexcept修饰符与noexcept操作符 异常处理的性能分析 正文 回到顶部 C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统为程序设置当前异常对象,然后执行程序的当前异常处理代码块,在包含了异常出现点的

(八)boost库之异常处理

(八)boost库之异常处理 当你面对上千万行的项目时,当看到系统输出了异常信息时,你是否想过,如果它能将文件名.行号等信息输出,该多好啊,曾经为此绞尽脑汁. 今天使用boost库,将轻松的解决这个问题. 1.boost异常的基本用法 先看看使用STL中的异常类的一般做法: // 使用STL定义自己的异常 class MyException : public std::exception { public: MyException(const char * const &msg):excepti

C++(四十六) — 异常处理机制、标准IO输入输出

1.异常处理机制 一般来说,异常处理就是在程序运行时对异常进行检测和控制.而在C++ 中,使用 try-throw-catch模式进行异常处理的机制. #include<iostream> using namespace std; int Fib(int n) { if (n <= 0) throw n; if (n >= 47) throw "n>=47 overflow"; if (n == 1 || n == 2) return 1; else re

python第四周程序控制结构之分支,条件判断,程序异常处理

一,程序的分支结构: 单分支(if) 双分支(if,else)紧凑形式:<表达式1> if <条件> else <表达式2> 多分支(if,elif,else) 条件判断及组合(数学符号同c)保留字and,or,not(与或非) 程序异常处理except #示例 try: num = eval(input("请输入一个整数:")) print(num**2) except:#可标注异常类型,仅相应该类型如except NameError print(

走进C++程序世界------IO标准库介绍

流概述 流是C++标准的组成部分,流的主要目标是,将从磁盘读取文件或将输入写入控制台屏幕的问题封装起来,创建流后程序员就可以使用它,流将负责处理所有的细节. IO类库 在C++输入?输出操作是通过C++系统提供的完成I/O操作的一组类实现的.主要包括: 标准流类:处理与标准输入设备(键盘)和输出设备(显示器)关联的数据流 文件流类:处理与磁盘文件关联的数据流 字符串流类:利用内存中的字符数组处理数据的输入输出 异常类等:处理异常错误. 标准IO对象: 包含iostream类的C++程序启动时,将