IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 15.异常处理 -> 正文阅读

[C++知识库]15.异常处理

1.为什么需要异常处理?

  1. 用 new 运算符动态分配空间时,空间不够导致无法分配;
  2. 访问数组元素时,下标越界;打开文件读取时,文件不存在。
  3. 访问了野指,出现内存错误等等 …

2.在c++ 中异常处理的方法??

利用try (测试)   throw(抛出异常) catch(处理异常)
  1. 在c 语言 中异常处理的方法??
    ? 利用 if 语句判断操作是否正确。

  2. c/c++ 中异常处理的区别:
    ? c++ 中的处理能力更强,逻辑性更严谨,且系统中某些函数已经预定义了异常的抛出。如at,new 等等…

  3. 语法:

    try {
        用户需要执行的代码
    }
    catch(异常类型) {
        异常处理代码
    }
    ...
    catch(异常类型) {
        异常处理代码
    }
    
  4. 例子:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        try{
           int *p =  new int[0x0fffffffffffffff];  //系统自动抛出异常
        }
        catch(...)  //接收异常
        {
                cout  << "程序出现异常"  << endl;
        }
    }
    
    

3.异常的抛出

当系统不会自动抛出异常时,用户就要手动抛出异常。

 string a="hello"; 
    try{
     cout << a.at(1000000)  << endl;  //带有自动抛出异常的功能
    }catch(...)
    {
         cout << "代码出现异常" << endl;
    }

    try{

        cout << a[1000000] << endl;  //不具有自动抛出异常
    }catch(...){
        cout << "代码异常2" << endl;
    }

抛出异常语法:

throw  表达式;

例子:

#include <iostream>
using namespace std;

int main()
{
    string a="hello"; 
    try{
     cout << a.at(1000000)  << endl;  //带有自动抛出异常的功能
    }catch(...)
    {
         cout << "代码出现异常" << endl;
    }

    try{
        int size=1000000;
        if(size >= 5)  //手动  抛出异常
        {
                throw "数组越界";
        }
        cout << a[size] << endl;  //不具有自动抛出异常
        
    }catch(...){
        cout << "代码异常2" << endl;
    }
}

4.异常的类型捕捉

catch(…) : 可以捕捉任何的异常类型,拿不到异常的抛出数据

#include <iostream>
using namespace std;

class base
{
    
};

int main()
{
    base a;

    try{
            //直接抛出异常 
            throw  a;
    }
    catch(int a)  //捕捉  抛出的整形的异常
    {
        cout <<  "int"<<a << endl;
    }
    catch(double a)//捕捉  抛出的浮点型的异常
    {
        cout <<"double"<< a << endl;
    }
    catch(const char *a)//捕捉  抛出的字符串类型异常
    {
        cout << "char *"<<a << endl;
    }
    catch(...)
    {
        cout << "其他异常" << endl;
    }

}

5.系统预定义的异常类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GfuoNTnI-1648897239255)(笔记.assets/image-20210429102411957.png)]

 catch(exception &e)  //利预定义异常类型可以,告诉用户异常原因
 {
 	cout << "其他异常"  << e.what() << endl;
 }

6.异常的再抛出

当一个函数出现异常的时候,抛出异常并,处理的的话,这个异常会继续往上抛出,直到处理为之!!

#include <iostream>

using namespace std;

//test 自己抛出自己处理
void test()
{
    try{
          throw "抛出异常";
    }
    catch(const char *a){   //在这里已经把异常处理掉了 
            cout << "输出异常:"  << a << endl;
    }
}

void test0()  //出现了异常,未处理 
{
    throw "抛出异常";  //只在当前函数中抛出不处理
}

void test1() //把异常抛出到 test1中  ,未处理
{
      cout << "test1" << endl; 
      test0();   
      cout <<  "test endl"  << endl;
}

int main() //继续把异常抛出到 main 中,catch已经处理
{
        try{
           // test(); //执行test 函数 
            test1();
        }
        catch(...){
            cout << "出现异常并未处理" << endl;
        }
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:56:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:53:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码