C++异常(基本知识)、C++模板类(基本知识)

news2024/9/22 16:03:18

什么是异常和异常处理?
异常就是程序运行过程中出现的问题。“异常”问题并不经常出现(按道理来说我们写好的正常的程序是不应该频繁出现异常的);异常处理技术使得我们可以写程序解决出现的异常问题。很多情况下,处理异常就能使程序想没发生过问题一样继续执行(比如:异常不处理或者处理的很差使用过程中发生崩溃、闪退等问题,处理的好的话就可能我们都不知道有异常,程序自己处理解决了,客户端不知道后台发生了异常,客户能正常获得他想要的信息、执行它的功能就可以。);严重的问题也许会导致程序不能继续执行,使用异常处理可以用可控制的方式对用户发出警示,然后在终止程序(这种相比较于软件闪退、崩溃情况会好一些,起码告知了用户程序不能继续执行,提醒一下用户)
异常处理技术使得我们可以编写更健壮、更具有容错性(这里的容错性不是指包容我们程序的错误,而是对用户的容错,比如用户输入错误的信息,除法中输入了除数为0的情况等)的程序,能够处理发生的问题使程序继续执行,或者优雅的终止。
在这里插入图片描述
由于上面的问题,所以要思考如何处理异常,将异常处理放在何处。
异常处理技术使我们可以将错误处理的代码从主逻辑中移出,使得程序更清晰,能增强程序的可维护性;
我们可以有选择的处理异常:所有异常、某种特定类型的所有异常、一组相关类型的所有异常(例如属于某个类继承层次体系的异常);
这种灵活性缩小了错误被忽略的可能性,从而使得程序更加健壮;
C++d异常处理机制使我们从项目一开始就很容易地设计异常处理;
何时使用异常处理?
异常处理用于处理同步错误,也就是语句执行时发生的错误;常见的使用异常处理的错误有:数组下标越界、除数为0、输入参数不合法、算术溢出、内存不够引起的内存分配不成功等问题;异常处理不是用于处理异步事件相关的错误的(例如:磁盘读写结束、网络通信到达、点击鼠标或键盘这些与程序的控制流程并行、独立,不适合异常处理);异常处理机制还适用于处理程序与其他软件元素,例如:成员函数、构造函数、析构函数、类交互时出现的问题。
注意:这些软件元素通常并不在内部处理错误,而是使用异常提示程序发生了问题,这就使得每个应用程序可实现个性化的错误处理。(比如说有一个除数为0的问题,底层在处理这种问题的时候他并不知道遇到这种情况该怎么处理,他不能处理这个情况他就会告诉程序,抛出他的异常。)
复杂的应用程序通常由|预定义的软件组件|和|调用预定义组件的应用程序持有的软件组件|构成(注意断句);当软件组件遇到异常问题时,需要一种机制将问题通知给调用者,预定义组件无法事先预见到不同的应用程序打算如何处理异常问题。
在这里插入图片描述
解释:函数f根据程序的需求向下调用他所需要用到的函数,各函数一轮一轮向下,然后如果底层的h()遇到了引发异常的问题,他如果处理不了,他就会向上给调用它的g(),如果g()也处理不了,就会在向上,一级一级向上,直至可以处理这个异常的那一步。
在这里插入图片描述

在这里插入图片描述
异常声明(异常规范)
一个函数显式声明可能抛出的异常,有利于函数的调用者为异常处理做好准备。
在这里插入图片描述
在这里插入图片描述
慎用异常声明的情况
1.对于带类型参数的函数模板,要尽量避免使用异常声明,因为不同类型对于相同行为的定义不同,抛出的异常也就不同,因而函数模板很难活不可能确定他具现化的函数实体所可能抛出的异常。
2.使用回到函数时
3.系统可能跑出的异常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

C++模板类

模板类方便的是编写者,函数重载方便的是使用者,编写者还是要实现不同的重载函数,并没有少写代码。
在这里插入图片描述
template:关键词
typename T:表示类型参数
简单的函数中我们大多使用数据作为参数,但是在模板中类型也是可以作为参数的。数据作为参数作用:参与计算、或是其他操作的值是我们定制的参数,那我们可以用不同的参数参与这个函数的操作;类型作为参数:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
类模板的作用
使用类模板使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的类型、某些成员函数的返回值,能取“任意”类型(包括基本类型和用户自定义的类型)
在这里插入图片描述
上图的“类名”准确说是“类模板”
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图是为了形象理解才会展示这样的替换,实际上编译原理执行的操作并不会让他们产生冲突,会让他们成功的运行下去

模板与群体数据(就是STL容器)
群体是指由多个数据元素组成的集合体。群体可以分为两个大类:线性群体和非线性群体(联想到数据结构中线性结构和非线性结构)
线性群体中的元素位置排列有序,可以区分为第一个元素、第二个元素等
非线性群体不用位置顺序来标识元素
静态数组具有固定的元素个数,其中的元素可以直接通过下标访问,它的大小在编译时就已经确定,在运行的时候无法更改,vector元素的个数可以在程序运行时改变,类模板实现动态数组。
泛型程序设计的基本概念(也是STL)
编写不依赖于具体数据类型的程序、将算法从特定的数据结构中抽象出来,成为通用的、C++的模板为反省编程程序设计奠定了关键的基础。
示例:
在这里插入图片描述
在这里插入图片描述
参考文献: 郑莉教授C++语言程序设计-哔哩哔哩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳

有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳 时代背景女生有点作怎么办?大商家族的爱情观 时代背景 一块钱的东西,赋予俩块钱的意义,三块钱卖出去。 用商…

【垃圾识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目选题+TensorFlow+图像识别

一、介绍 垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集(‘塑料’, ‘玻璃’, ‘纸张’, ‘纸板’, ‘金属’),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进…

vscode -ssh免密登陆

1.生成ssh使用的公钥/密钥对 请从客户端上的 PowerShell 或 cmd 提示符运行以下命令,具体使用方法详细见:微软官方 ssh-keygen -t rsa 一路回车,秘钥会生成到C:\Users\name\.ssh 2.将私钥配置到vscode的ssh中: 3.将本地公钥配置…

【计算机网络篇】数据链路层 功能|组帧|流量控制与可靠传输机制

🧸安清h:个人主页 🎥个人专栏:【计算机网络】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 系列文章目录 【计算机网络篇】计算机网络概述 【计算机网络篇…

最新免费域名申请

在互联网时代,每个码农都想拥有一个免费的域名,方便开发调试,也可用作自己网站等。如何申请一个免费的域名,时间上先错过了freenom,后面又错过nic.eu.org申请(现在申请时间长且很难通过),直到最近又有免费的…

[杂谈-黑神话:悟空] 中国3A游戏的崛起之路:挑战与机遇并存

[杂谈-黑神话:悟空] 中国3A游戏的崛起之路:挑战与机遇并存 《黑神话:悟空》的出现,让我们看到了中国3A游戏的希望和未来。对于中国游戏产业的从业者和爱好者来说,这是一个值得关注和期待的领域。 在游戏产业蓬勃发展的今天&#…

QT打包--windeployqt执行,运行程序提示缺少库

执行windeployqt.exe D:\Data\code\QtCode\Release\RegularExp\RegularExp.exe 生成相应的dll动态库 执行RegularExp.exe,出错:“由于找不到libgcc_s_seh-1.dll…” 找到安装的qt对应的libgcc_s_seh-1.dll拷贝到RegularExp.exe同级目录下, 执…

力扣题解2374

大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(中等): 边积分最高的节点 给你一个有向图,图中有 n 个节点,节点编号从 0 到 n - 1 ,其中每个节点都 恰有一条 出边。…

[大语言模型-论文精读] 以《黑神话:悟空》为研究案例探讨VLMs能否玩动作角色扮演游戏?

1. 论文简介 论文《Can VLMs Play Action Role-Playing Games? Take Black Myth Wukong as a Study Case》是阿里巴巴集团的Peng Chen、Pi Bu、Jun Song和Yuan Gao,在2024.09.19提交到arXiv上的研究论文。 论文: https://arxiv.org/abs/2409.12889代码和数据: h…

2024年9月19日

1.四个属性: 连接数据库 四个属性 操作数据库重要的对象 操作sql语句的对象 预编译 结果集 对象的属性和数据表的子弹 映射准备这条sql语句 文件:核心配置文件 2.创建 build success 做工具类 如果客户名不为空,否则客户名为空

Python中的IPython:交互式的Python shell

你是否曾经想要一个能让你与Python代码实时交互的环境?一个可以即时执行代码、查看结果,甚至可以在运行过程中修改变量的工具?如果是,那么IPython就是为你量身打造的利器!在这篇文章中,我们将深入探讨IPyth…

CDVAE项目环境配置

CDVAE环境配置 1. 系统环境2. 设置环境变量3. 配置环境变量4. 安装CDVAE虚拟环境5. 资料下载 1. 系统环境 系统环境:Ubuntu22.04GeForce RTX 3090cuda12.6(cuda版本11.1以上均适用)。 2. 设置环境变量 先按照CDVAE中描述的设置环境变量。 …

金刚石切削工具学习笔记分享

CVD钻石-合成单晶钻石之一 金刚石具有极高的硬度和耐磨性、较低的摩擦系数、较高的弹性模量、较高的热导率、较低的热膨胀系数、与有色金属的亲和力较小等优点,是目前最硬的工具材料,主要分为单晶金刚石和聚晶金刚石两大类。单晶金刚石又分为天然单晶金…

优化内存工具 | RAM Saver Pro v24.9 便携版

RAM Saver是一款专业的RAM优化工具,旨在提高计算机的性能和运行速度。它通过多种优化技术,如内存碎片整理、CPU和主板缓存效率提升、恢复内存等,为应用程序提供更多的内存资源,从而使系统运行更加流畅。适合所有需要优化内存使用和…

2、StarGAN V2

2、StarGAN V2 StarGAN 论文链接:StarGAN StarGAN V2 论文链接:StarGAN V2 在介绍StarGAN V2之前,我们先对StarGAN有一定的了解,StarGAN V2只是在StarGAN的基础上做出了改进,基本的架构是没有变的,只是将…

探索AI编程新境界:aider库揭秘

文章目录 **探索AI编程新境界:aider库揭秘**背景:为何选择aider?简介:aider是什么?安装指南:如何安装aider?功能演示:aider的简单用法实战应用:aider在不同场景下的使用常…

【RabbitMQ】应用问题

RabbitMQ 应用问题 1. 幂等性保障1.1 幂等性介绍1.2 解决⽅案全局唯⼀ID业务逻辑判断 2. 顺序性保障2.1 顺序性保障介绍2.2 顺序性保障⽅案 3. 消息积压问题3.1 原因分析3.2 解决⽅案 1. 幂等性保障 1.1 幂等性介绍 幂等性是数学和计算机科学中某些运算的性质, 它们可以被多次…

华为静态路由(route-static)

静态路由的组成 在华为路由器中,使用ip route-static命令配置静态路由。 一条静态路由主要包含以下要素: 目的地址:数据包要到达的目标IP地址 子网掩码:用于指定目的地址的网络部分和主机部分 下一跳地址(可选&#…

【yolo破损纸板-包装盒-快递袋缺陷检测】

yolo破损纸板-包装盒-快递袋缺陷检测 破损纸质包装盒检测方盒型快递包裹检测 破损纸质包装盒检测 数据集合模型 可视化 方盒型快递包裹检测 数据集和模型 train: ../train/images val: ../valid/images test: ../test/images nc: 1 names: - box_packet可视化

理解JVM中的死锁:原因及解决方案

死锁是并发应用程序中的常见问题。在此类应用程序中,我们使用锁定机制来确保线程安全。此外,我们使用线程池和信号量来管理资源消耗。然而,在某些情况下,这些技术可能会导致死锁。 在本文中,我们将探讨死锁、死锁出现…