c++异常处理机制

  1.异常处理的实现

  

#include<iostream>
using namespace std;
double divide(double,double);
int main(){
    double f1=0.0,f2=0.0;
    try{
        cout<<"f1/f2="<<divide(f1,f2)<<endl;
    }
    catch(double){
        cout<<"被0除"<<endl;
    }
    return 0;
}
double divide(double x,double y){
    if(y==0)
        throw 0.0;
    return x/y;
}

  运行结果:  被0整除

#include<iostream>
using namespace std;
class OutOfBounds{
public:
    OutOfBounds(int a){
        i=a;
    }
    int indexValue(){
        return i;
    }
private:
    int i;
};
class Array{
public:
    int &operator[](int i){
        if(i<0||i>=10){
            throw OutOfBounds(i);
            return a[i];
        }
    }
private:
    int a[10];
};
int main(){
    Array a;
    try{
        a[3]=30;
        cout<<"a[3]  "<<a[3]<<endl;
        a[100]=100;
        cout<<"a[100]"<<a[100]<<endl;
    }
    catch(OutOfBounds error){
        cout<<"Subscript value "<<error.indexValue()<<" out of bounds.\n";
    }
    return 0;
}

重载运算符号[],进行越界检查。如果下标为负或大于10,则出错。

注意:重载运算符operator[]函数第一行的&符号是必需的。因为这个函数不仅返回数组元素的值,而且还返回这个元素本身(即左值),以便在一条赋值语句的左侧使用诸如a[3]的表达式,如表达式a[100]=1000;

  运行结果:

2重新抛出异常和异常规范

#include<iostream>
using namespace std;
void h(){
    throw 0;
}
void g(){
    try{
        h();
    }
    catch(int){
        cout<<"Catch in g\n";
        throw;
    }
}
int main(){
    try{
        g();
    }
    catch(int){
        cout<<"Catch in main\n";
    }

    return 0;
}

运行结果:

3.标准库中的异常类

#include<iostream>
#include <exception>
using namespace std;

int main(){
    try{
        exception theError;//声明一个标准c++异常类exceptio的对象
        throw(theError);//抛出该异常类的对象
    }
    catch(const exception &theError){//捕捉标准c++异常类的对象
        cout<<theError.what()<<endl;//用waht成员函数显示出错原因
    }
    try{
        logic_error theLogicError("Logic Error!");//声明一个标准c++异常类logic_error的对象
        throw(theLogicError);//抛出该异常类的对象
    }
    catch(const exception &theLogicError){//捕捉标准c++异常类的对象
        cout<<theLogicError.what()<<endl;//用waht成员函数显示出错原因
    }
    return 0;
}

运行结果:

时间: 2024-12-28 20:35:13

c++异常处理机制的相关文章

深入理解Java异常处理机制

1. 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,"猜猜"它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦. <span style="background-color: rgb(255, 255, 255

Java异常处理机制的秘密

一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw2.finally中throw一定能抛回上一层,因为此时其后的return不会被执行到(throw中断了正常的顺序流)3.在try/catch中return并不会直接返回上一层,而是先执行finally再返回 二.一段小程序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

C++学习笔记27:异常处理机制

一.异常处理机制基础 异常的定义 程序中可以检测的运行不正常的情况 异常处理的基本流程 某段程序代码在执行操作时发生特殊情况,引发一个特定的异常 另一段程序代码捕获该异常并处理它 二.异常的引发 throw 三.异常的捕获 try { ... } catch(...) 四.异常类与异常对象 五.异常处理策略 异常类可以派生和继承,形成类库架构 可捕获的异常对象的型式 普通型式(包括类):异常对象需要拷贝 对某型式对象的引用:没有额外的拷贝动作 指向某型式对象的指针:要求对象动态构造或者在catc

Java之异常处理机制

来源:深入理解java异常处理机制 2.Java异常    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常.因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件.当条件生成时,错误将引发异常. Java异常类层次结构图: 图1 Java异常类层次结构图 在 Java 中,所有的异常都有一个共同的祖先 Th

基于返回值的错误处理与异常处理机制

基于返回的错误处理和异常处理机制的比较 一.基于返回值的错误处理机制 对于传统的面向过程语言比如说C语言,通常使用基于返回值的错误处理机制,即通过在程序中定义程序出错时的返回值,比如说0代表操作成功,而1代表操作失败. 这种错误处理机制的好处在于有时候即使出现了异常程序或许也可以继续执行(但是最终执行结果或许不对,而这就导致查错比较困难,因为有时候仅仅通过函数返回值我们并不知道程序出错的原因究竟是什么,比如说程序操作失败返回值为0,我们在控制台上看到程序输出为0,但是除此之外没有其他额外的信息帮

深入理解java的异常处理机制

 JAVA异常的概念    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常.因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件.当条件生成时,错误将引发异常. Java异常类层次结构图: 图1 Java异常类层次结构图 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Thr

Java从零开始(3)异常处理机制

异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java语

java异常处理机制

/* * 异常处理机制 * 1.分类:Error和Exception * Error错误是JVM自动报错的,程序员无法解决例如开数组过大int a[]=new int [1024*1024*1024]; * Exception错误时程序员要解决的问题,例如指针越界,零做除数 * 2.异常处理 * try{ * 需要检测是否发生异常的代码 * } * catch(Exception e){ * 处理异常的代码(一般是打印错误信息) * } * finally{ * 必须要运行的代码(一般是关闭数据

C++中的异常处理机制

C++中的捕获异常机制catch参数中实参的类型不同,采取的处理方式则不相同,且与普通的函数调用还不一样,具体表现为当抛出异常throw A()或throw obj时,对象会进行一次额外的对象复制操作. 测试类实现如下: #include <iostream> /** * 测试异常抛出与虚函数 */ using namespace std; class A { public: A() {cout << "A() " << endl;} ~A(){co

Atitit.js javascript异常处理机制与java异常的转换.js exception process Voae

Atitit.js javascript异常处理机制与java异常的转换.js exception processVoae 1. 1. javascript异常处理机制 1 2. 2. Web前后台异常的统一处理 1 3.  java异常转换为js异常 1 3. -------------详细代码 2 1. 1. javascript异常处理机制 Throw str Not throw error  ..cause ie,ff error obj is diff.. 2. 2. Web前后台异常