首页 > 编程语言 >c++ 异常处理案例自行分析

c++ 异常处理案例自行分析

时间:2024-10-28 20:20:00浏览次数:7  
标签:cout 对象 MyException c++ 自行 案例 异常 void 变量

19.5 异常变量的声明周期

class MyException
{
public:
    MyException()
    {
        cout << "异常变量构造!" << endl;
    };
    
    MyException( const MyException &e)
    {
        cout << "拷贝构造" << endl;
    }
    
    //析构函数
    ~MyException()
    {
        cout << "异常变量析构" << endl;
    }  
};

19.5.1 以普通对象 接异常值

void test02()
{
    try
    {
        throw MyException();
    }
    catch(MyException e)//普通对象接异常(拷贝构造发生)
    {
        cout << "普通对象接异常" << endl;
    }
​
}
/******运行结果**********/
异常变量构造
拷贝构造
普通对象接异常
异常变量析构
异常变量析构

19.5.2 以对象指针 接异常值

void test03()
{
    try
    {
        throw new MyException();
    }
    catch(MyException *e)//指针对象接异常(delete释放)
    {
        cout << "普通对象接异常" << endl;
        delete e;       //需要手动释放
    }
​
}
/******运行结果**********/
异常变量构造
普通对象接异常
异常变量析构

19.5.3 对象引用 接异常值(推荐)

void test04()
{
    try
    {
        throw MyException();
    }
    catch(MyException &e)//引用对象接异常
    {
        cout << "普通对象接异常" << endl;
    }
​
}
/******运行结果**********/
异常变量构造
普通对象接异常
异常变量析构

19.6 异常的多态

//异常基类
class BaseException
{
public:
    //派生关键词
    virtual void printError(){};
};
​
//空指针异常  继承 class BaseException
class NullPointerException : public BaseException
{
public:
    //重写虚函数
    virtual void printError()
    {
        cout << "空指针异常!" << endl;
    }
};
​
//越界异常    继承 class BaseException
class OutofRangeException : public BaseException
{
public:
    //重写虚函数
    virtual void printError()
    {
        cout << "越界异常!" << endl;
    }
};
​
void doWork()
{
    //throw NullPointerException();
    throw OutofRangeException();
}
​
int main()
{
    try
    {
        doWork();
    }
    catch(BaseException &ex) //父类引用 可以 捕获搭配父类派生出的所有子类的子类
    {
        ex.printError();
    }
}
​

标签:cout,对象,MyException,c++,自行,案例,异常,void,变量
From: https://blog.csdn.net/HanSen102510/article/details/143312654

相关文章

  • 【C++练习】基于函数嵌套调用的点餐流程
    题目:基于函数嵌套调用的点餐系统实现描述:        需要实现一个简化的点餐系统,该系统能够处理多位顾客的点餐、支付以及提供食物的过程。系统的主要流程通过函数嵌套调用来实现,包括展示菜单、点餐、生成账单、支付以及提供食物等功能。具体要求:菜单展示:使用 showMe......
  • c++智能指针
    普通指针的不足new和new[]的内存需要用delete和deletel]释放。程序员的主观失误,忘了或漏了释放。程序员也不确定何时释放。普通指针的释放类内的指针,在析构函数中释放。C++内置数据类型,如何释放?new出来的类,本身如何释放?C++11新增三个智能指针类型unique_pt......
  • 【C++笔记】list结构剖析及其模拟实现
    【C++笔记】list结构剖析及其模拟实现......
  • 【33】C++文件流相关内容
    目录文件流的状态检查文件流的定位seekgtellgseekp常见错误总结文件流的状态检查s.is_open()文件流是否打开成功, s.eof() 流s是否结束s.fail()流s的failbit或者badbit被置位时, 返回truefailbit: 出现非致命错误,可挽回, 一般是软件错误badbit置位......
  • 【30】C++子类相关
    子类型关系什么是子类型公有继承时,派生类的对象可以作为基类的对象处理,派生类是基类的子类型。 #include<iostream>usingnamespacestd;classA{public: A(){} ~A(){} voidkill(){cout<<"Akill."<<endl;}};classB:publicA{public: B(){}......
  • C++之OpenCV入门到提高001:使用 Visual Studio2022 配置 OpenCV 环境
    一、介绍从今天开始,我们又要开始一个新的系列了,这个系列就是《C++之Opencv入门到提高》。这个系列是有关如何使用C++语言,通过Opencv来实现图像处理、缺陷检测、视频处理、机器学习等功能。OpenCV我也是新接触的,一步一步的学习,一步一步提高。这个系列是以C++为基......
  • Mybatis快速入门(一个案例带你入门mybatis)
     mybatis是一款持久层框架,主要用于简化jdbc(java语言中用于操作关系型数据库的一套api,不懂的可以看我上一篇文章)。既然是用来操作数据库的,那么我就以查询一个数据表中的数据为案例来入门mybatis。要想查询数据表中的数据就得先有数据,所以我就先来创建一个数据表。创建数据表......
  • Python100个案例源码(基础应用,网络爬虫,数据分析与图表,文件、系统、图形与多媒体,办公自
    Python100个案例源码点我下载此资源部分示例模拟迷宫地图的二维列表map_list=[["“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“,”@“......
  • 基于案例分析 MySQL 权限认证中的具体优先原则
    在MySQL的日常管理过程中,大家或多或少会遇到权限认证相关的问题。例如,本来能够正常执行的操作,可能在新增一个账号或授权后就突然失败了。这种现象往往让人误以为是bug,但很多时候,其实并不是。下面,将通过两个案例来阐明MySQL权限认证中的具体优先原则,并在此基础上,分析以下问......
  • C++在实际项目中的应用第二节:C++与区块链
    第五章:C++在实际项目中的应用第二课:C++与区块链区块链技术因其去中心化、不可篡改和透明性而受到广泛关注。在这门课程中,我们将深入探讨区块链的基本原理、智能合约的开发以及实际应用的案例分析,重点使用C++作为实现语言,以便充分发挥其高效性和强大的功能。1.区块链的......