第10课 - C++异常简介

-c++内置了异常处理的语法元素try...catch...

  -try语句处理正常代码逻辑

  -catch语句处理异常情况

  -try语句中的异常由对应的catch语句处理

    try
    {
        double c = divide(1, 0);

        cout << "c = " << c << endl;
    }
    catch(...)
    {
        cout << "Divided by zero..."  << endl;
    }

-c++通过throw语句抛出异常信息

double divide(double a, double b)
{
    const double delta = 0.000000000000001;
    double ret = 0;

    if( !((-delta < b) && (b < delta)) ) {
        ret = a / b;
    }
    else {
        throw 0;   // 产生除 0 异常
    }

    return ret;
}

——c++异常处理分析

  - throw抛出的异常必须被catch处理

    -当前函数能够处理异常,程序继续往下执行

    -当前函数无法处理异常,则函数停止执行,并返回

fuc3抛出异常,如果fuc3中没有异常处理,则异常传递到fuc2,如果fuc2有异常处理,程序返回继续执行,如果没有异常处理,继续返回fuc3,依次类推,如果最后返回到main函数都还没有处理异常,程序停止运行。

#include <iostream>

using namespace std;

double divide(double a, double b)
{
    const double delta = 0.000000000000001;
    double ret = 0;

    if( !((-delta < b) && (b < delta)) ) {
        ret = a / b;
    }
    else {
        throw 0;   // 产生除 0 异常
    }

    return ret;
}

void Demo1()
{
    //catch捕获,没有类型转换,必须完全匹配
    try
    {
        throw ‘c‘;
    }
    catch(int i)
    {
        cout << "catch(int i)" << endl;
    }
    catch(double d)
    {
        cout << "catch(double d)" << endl;
    }
    catch(char c)
    {
        cout << "catch(char c)" << endl;
    }
}

void Demo2()
{
    throw 0.0001; // "D.T.Software";   // const char*
}

int main()
{
    cout << "main() begin" << endl;
    //没有异常,不处理
    try
    {
        double c = divide(1, 1);

        cout << "c = " << c << endl;
    }
    catch(...)
    {
        cout << "Divided by zero..."  << endl;
    }

    Demo1();

    try
    {
        Demo2();
    }
    catch(char* c)
    {
        cout << "catch(char* c)" << endl;
    }
    catch(const char* cc)
    {
        cout << "catch(char* cc)" << endl;
    }
    catch(...)
    {
        cout << "catch(...)" << endl;
    }

    cout << "main() end" << endl;

    return 0;
}

时间: 2024-12-25 09:52:09

第10课 - C++异常简介的相关文章

C语言-第15课 - 编译过程简介

第15课  - 编译过程简介 1. 编译器做了什么 (1)预编译: l 处理所有的注释,以空格代替. l 将所有的#define删除,并且展开所有的宏定义. l 处理条件编译指令#if,#ifdef,#elif,#else,#endif. l 处理#include,展开被包含的文件. l 保留编译器需要使用的#pragma指令. 预处理指令:gcc -E file.c -o hello.i (2)编译 l 对预处理的文件进行一系列的词法分析,语法分析和语义分析: 词法分析主要分析关键字,标示符,

Spark3000门徒第10课Java开发Spark实战总结

今晚听了王家林老师的第10课Java开发Spark实战,课后作业是:用Java方式采用Maven开发Spark的WordCount并运行在集群中 先配置pom.xml <groupId>com.dt.spark</groupId> <artifactId>SparkApps</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging

10 错误和异常 - 《Python 核心编程》

?? 什么是异常? ?? Python 中的异常 ?? 探测和处理异常 ?? 上下文管理 ?? 引发异常 ?? 断言 ?? 标准异常 ?? 创建异常 ?? 相关模块 10.1 什么是异常人们需要一个"柔和"的处理错误的方法, 而不是终止程序. 错误 从软件方面来说, 错误是语法或是逻辑上的. 当 Python 检测到一个错误时, 解释器就会指出当前流已经无法继续执行下去. 这时候就出现了异常. 语法错误 语法错误指示软件的结构上有错误, 导致不能被解释器解释或编译器无法编译. 逻辑错误

高并发之Memcached实战第10课-“Memcached Get获取数据”部分代码分享2

高并发之Memcached实战第10课-"Memcached Get获取数据"部分代码分享2 一.Memcached客户端读写在同一个程序的逻辑: MemcachedClient mcc = new MemcachedClient(list); if(mcc.get("something")==null) { if(!DataFactory.Exist(somethingObject)) { DataFactory.StoreInDB(somethingObject

安卓学习第10课——listview

1.普通listview <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" androi

第10课 - 变量与函数的综合示例

第10课 - 变量与函数的综合示例 1. 实战需求 (1)自动生成 target 文件夹存放可执行文件 (2)自动生成 objs 文件夹存放编译生成的目标文件(*.o) (3)支持调试版本的编译选项 (4)考虑代码的扩展性  --> 使用变量 2. 工具原料 - $(wildcard _pattern) 获取当前工作目录中满足_pattern的文件或目录列表 - $(addprefix _prefix, _names) 给名字列表_names中的每一个名字增加前缀_prefix 3. 关键技巧

python进阶教程 中文pdf课件版(共10课)【20MB】高清下载

Python,作为一个"老练"."小清新"的开发语言,已受到广大才男俊女的喜爱.我们也从最基础的Python粉,经过时间的摧残慢慢的变成了Python老鬼.本教程由浅入深,简单易学,需要的可下载试试! 目录 第01课 Python入门 第02课 更新版-numpy第03课 更新版-pandas第05课 python 可视化实战 第06课 PythonNLTK第07课 Python社交网络分析igraph第08课 python和机器学习 第10课 Python分布式计

python 学习第八课 -- 异常 反射 socket

面向对象 相关 一.isinstance(obj,cls)  查看obj是否为cls的对象 issubclass(sub,super) 查看类sub是否为super的派生类 二. 异常处理 1.   异常基础 try: pass except Exception,e: print e e为Exception的对象,print e 就是print Exception中的__str__ 2.   异常种类 常用异常 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo

java中10大常见异常

NO.1 java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然