C++,异常、转换函数、智能指针

目录

一、异常

1 C++ 异常机制:

2 使用try catch进行异常处理.

3、c++ 已经内置标准异常类,专业用于抛出的语法中

4 自定义异常:

5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层函数处理,以此类推。

二、转换函数

三、智能指针

1 unique_ptr,

2 shared_ptr

3 weak_ptr


一、异常

1 C++ 异常机制:

        可以让程序在即将发生异常前被处理,不会让程序因为发生异常而终止。

2 使用try catch进行异常处理.

处理执行try块的代码,如果执行throw 数据, 则try中余下的代码都不执行,进行进入catch中执行,而catch中参数会收到throw 执行出的数据。catch执行结束后,程序从catch后面的代码继续执行

抛出的该数据可以是基础类型,也可是对象.

示例1: 抛出int型数据

示例2:抛出字符串

示例3:抛出对象

该示例是一个不规范的示例,此处给出,只为讲清楚异常的机制

3、c++ 已经内置标准异常类,专业用于抛出的语法中

异常类使用时, 导入,并且异常类的名称空间为std

示例1:抛出exception异常

示例2:抛出invalid_argument异常

该异常对象构造函数还字符串参数。

4 自定义异常:

    一般继承exception来实现,理论上也可以通过继承exception的子类来实现

5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层函数处理,以此类推。

示例1:

 在函数后面指定能抛出的异常数据类型

 指定抛出的是类时,实计抛出的可以是指定类和派生类的对象

    如果函数抛出throw()则表示不能抛出异常,该方式现在已经建议使用(11版本开始) const noexcept代替,就像前面使用const char* what() const noexcept , 表示不能抛出异常。

二、转换函数

1 概念:

转换函数的实质就是运算符重载,只是重载的运算符不是内置的运算符而是类名这个特殊的自定义类型。

2 自定义转换函数

(1)语法形式:

operator 类型名( )

{

    实现转换的语句

}

(2)转换函数的基本规则:

转换函数只能是成员函数,无返回值,空参数。

不能定义到void的转换,也不允许转换成数组或者函数类型。

转换常定义为const形式,原因是它并不改变数据成员的值。

explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换

(3)示例:

//源文件,测试文件
#include <iostream>
using namespace std;
class Integer {
private:int val;
public:Integer(int i=0) {cout<<"Integer(int i)"<<endl;this->val = i;}//转换函数operator int() const {cout<<"int()"<<endl;return val;}void setVal(int val) {this->val = val;}int getVal() {return val;}
};
int main() {Integer i;// 触发 Integer(int u)i.setVal(100);int x = i;//等效书写 int x = (int)i; 触发int()。cout<<x<<endl;//100Integer y = 200;// 触发Integer(int i)cout<<y<<endl;// 触发int()  200return 0;}

3 标准转换函数

智能指针:

只针对堆中对象。 类名 p=new 类名。

1、unique_ptr:

只允许一个指针指向对象,指针不指向堆中对象时,堆中对象被销毁。

2、shared_ptr

三、智能指针

    C++11中有四种智能指针,auto_ptrshared-ptrunique_ptrweak-ptr。其中auto_ptr有和多不足之处,在C++11中已经建议废弃使用。都是在memory头文件中声明的。名称空间为std

1 unique_ptr

当变量销毁或变量的值置NULL后,指向的对象会销毁,该对象还只能一个指针指向它。

该指针的操作

(1) p->访问对象中的成员

(2) p = NULL;

(3) p.reset();//等效于 p = NULL

(4) p.reset(new Demo); p指向新的堆中的对象, 不再指向之前的内容

示例: unique_ptr

2 shared_ptr

在给shared_ptr分配内存时建议使用make_shared函数,这样最安全。make_shared会分配一个临时对象,而临时对象又会自动销毁,所以会有两次析构函数的执行。

p1.reset()会使用p1不再指向对象。等效于p1=NULL

p1.reset(new Demo),该指针指向新的对象了。

3 weak_ptr

可以保存一个“弱引用”,引用一个已经用shared_ptr管理的对象。

weak_ptr可通过shared_ptr来初始化

weak_ptr.expired()判断对象是否销毁,如果有返回0,没有返回1

weak_ptr.lock()返回shared_ptr, 如果没有返回NULL

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

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

相关文章

Spring 学习(六)代理模式

10. 代理模式 案例 10.1 静态代理 角色分析 抽象角色&#xff1a;一般使用接口或者抽象类实现。真实角色&#xff1a;被代理的角色。代理角色&#xff1a;代理真实角色&#xff0c;含附属操作。客户&#xff1a;访问代理对象的角色。 租房案例 定义租赁接口 /*** TODO* 租房*…

MySQL 基础

本系列文章为【狂神说 Java 】视频的课堂笔记&#xff0c;若有需要可配套视频学习。 1. 简介 数据库&#xff08;DB&#xff0c;Database&#xff09;是安装在操作系统上的存储数据的软件。 关系型数据库&#xff08;RDB&#xff09;以行列形式存储数据。 非关系型数据库&am…

竞赛选题 基于视觉的身份证识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-sen…

第二届全国高校计算机技能竞赛——Java赛道

第二届全国高校计算机技能竞赛——Java赛道 小赛跳高 签到题 import java.util.*; public class Main{public static void main(String []args) {Scanner sc new Scanner(System.in);double n sc.nextDouble();for(int i 0; i < 4; i) {n n * 0.9;}System.out.printf(&…

JavaScript系列从入门到精通系列第四篇:JavaScript基本语法(二)

文章目录 前言 一&#xff1a;Number类型 1&#xff1a;字符串与Number类型 2&#xff1a;检查数据类型 3&#xff1a;Number最大值 4&#xff1a;Number四则运算精确性 二&#xff1a;布尔值 1&#xff1a;布尔值数量 2&#xff1a;布尔值类型查看 三&#xff1a;N…

基于微信小程序的电影院订票系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境说明用户微信小程序端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文参考源码获取 前言 &#x1f497;博主介绍&…

python -文件相关操作

文章目录 前言python -文件相关操作1. 读取文件1.1. 读取整个文件内容1.2. 读取文件的一行内容1.3. 将文件的内容按行存储到一个列表中 2. 写入文件3. 删除文件4. 追加文件5. 遍历文件5.1. 使用 os 模块 遍历文件5.2. # 使用 glob 模块 遍历文件5.3. 使用os.listdir() 函数遍历…

LeetCode 接雨水 双指针

原题链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题面&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a…

TS编译选项——不允许使用隐式any类型、不明确类型的this、严格检查空值、编译后文件自动设置严格模式

一、不允许使用隐式any类型 在tsconfig.js文件中配置noImplicitAny属性 {"compilerOptions": {// 不允许使用隐式any类型"noImplicitAny": true} } 开启后即可禁止使用隐式的any类型 注意&#xff1a;显式的any类型并不会被禁止 二、不允许使用不明确类…

uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.base64生成…

算法基础之归并排序

一、归并排序的形象理解 原题链接 示例代码 void merge_sort(int q[], int l, int r) {if (l > r) return;int mid l r >> 1;merge_sort(q, l, mid), merge_sort(q, mid 1, r);int k 0, i l, j mid 1;while (i < mid && j < r) //第一处if (q[i]…

通过410s读取电表数据并接入物联网平台

通过410s读取电表数据并接入物联网平台 设备接线准备设备调试代码实现Modbus TCP Client 读取电表数据读取寄存器数据转成32bit Float格式然后使用modbusTCP Client 读取数据 使用mqtt协议接入物联网平台最终代码实现 设备接线准备 设备调试 代码实现 Modbus TCP Client 读取…

LeetCode刷题

一 螺旋矩阵 题目链接&#xff1a;59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a;…

【论文阅读 08】Adaptive Anomaly Detection within Near-regular Milling Textures

2013年&#xff0c;太老了&#xff0c;先不看 比较老的一篇论文&#xff0c;近规则铣削纹理中的自适应异常检测 1 Abstract 在钢质量控制中的应用&#xff0c;我们提出了图像处理算法&#xff0c;用于无监督地检测隐藏在全局铣削模式内的异常。因此&#xff0c;我们考虑了基于…

如何正确使用MySQL的索引呢?

前言: 📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。 😇😇😇有兴趣的话关注博主一起学习,一起进步吧! 一、索引使用…

探索创意的新辅助,AI与作家的完美合作

在现代社会&#xff0c;文学创作一直是人类精神活动中的重要一环。从古典文学到现代小说&#xff0c;从诗歌到戏剧&#xff0c;作家们以他们的独特视角和文学天赋为我们展示了丰富多彩的人生世界。而近年来&#xff0c;人工智能技术的快速发展已经渗透到各行各业&#xff0c;文…

【数据结构】二叉树的销毁 二叉树系列所有源代码(终章)

目录 一&#xff0c;二叉树的销毁 二&#xff0c;二叉树系列所有源代码 BTee.h BTee.c Queue.h Queue.c 一&#xff0c;二叉树的销毁 二叉树建好了&#xff0c;利用完了&#xff0c;也该把申请的动态内存空间给释放了&#xff0c;那要如何释放呢&#xff1f; 我们还是以…

LeetCode力扣020:有效的括号

有效的括号 实现思路 设立判定条件遍历的范围 代码实现 class Solution(object):def isValid(self, s):""":type s: str:rtype: bool"""nlen(s)for i in range(0,n-1):if s[i]( and s[i1]!):return Falseif s[i][ and s[i1]!]:return Falseif s…

02Redis的命令行客户端和桌面客户端的下载和安装

Redis桌面客户端 安装完成Redis服务,我们就可以在Redis的客户端操作Redis的数据库实现数据的CRUD了,客户端分为三类命令行客户端, 图形化桌面客户端,编程客户端 命令行客户端 Redis安装完成后就自带了命令行客户端: redis-cli [options] [commonds] -h选项&#xff1a;指定…

Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具&#xff0c;可以去 github 下载最新版&#xff1a;https://github.com/allure-framework/allure2/releases 2、解压到本地 3、配置环境变量 复制路径如&#xff1a;F:\allure-2.13.7\bin 环境变量、Path、添加 F:\a…