C++——类和对象(3)
作者:几冬雪来
时间:2023年5月6日
内容:C++类和对象内容讲解
目录
前言:
1.运算符重载(续):
2.赋值重载:
结尾:
前言:
在上一篇博客中我们再一次讲解了类和对象的内容,并且引入了一个新的重载模式——运算符重载,那么今天我们就接着对其进行说明。
1.运算符重载(续):
在上一篇博客中我们讲解了一个日期类运算符重载的实现,也得知了运算符重载的话,如果是内置类型的话我们可以不进行书写,如果是自定义类型的话,我们就要对其进行书写。
我们也进行了日期的比较。
但是并不是所以运算符都是有意义的。
还是以我们的日期类函数为例:
比如:日期减日期可以算出我们两个日期间隔的天数,它是有意义的;但是在这里日期加日期就是没有意义的行为了。
而是否要重载运算符,取决于这个这个运算符对类有无意义。
类似我们这个代码,这两种写法从底层来讲是一样的。
因此在编译器来看,我们的第一个代码等价与第二个代码,在过程中我们的第一个代码就转换为第二个代码的指令。
但是这个代码是在类的外面的,因此我们无法去访问私有和保护。
在这里我们有两种方案,一种是友元这是我们后面才需要学习的知识,另一种方法则是将其放进类中。
但是在这里我们将代码放入类中的时候,代码报错了,这是因为在运算符重载的时候我们C++中有所规定。
在类中,作为类成员函数重载的时候,其形参看起来比操作数数目少1,因为在类中成员函数的第一个参数为隐藏的this。
且必须有一个参数为类类型,也就是自定义类型。
像这种两个都是内置类型的就会发生报错,因此至少要有一个自定义类型的。
操作符有几个操作数,重载就有几个参数。
因此我们的代码要进行修改。
而在我们学到现在的所有的运算符中,有五个运算符不能进行重载操作。
这个知识点一般会出现在选择题当中。
2.赋值重载:
接下来我们来讲解赋值重载。
首先在这里我们就要区分一下这两种情况,一种是两个对象都存在,一种是对另一个对象进行初始化的操作。
在这里我们也可以轻而易举的写出我们的代码,但是像这种代码的话有一个不足的点。
在我们的编译器中,我们可以在C语言和C++中写出这种赋值的代码。
这里的赋值顺序是从右到左进行赋值。
但是在我们上面的赋值重载中,因为我们并没有返回值为void。
因此在进行了第一次重载之后,我们就没有办法顺利的进行第二次重载了。
因此我们的代码要修改成这个样子,返回的是this指针,又因为节省空间因此在这里我们还要对其进行引用的操作。
这样我们就是返回的就是d4的一个别名了,同时也不用担心出作用域销毁的事情。
因为我们的赋值重载和拷贝构造一样,所以我们可以让编译器自己帮我们创建。
如果是栈的话,就需要我们自己去创建。
这里还要了解的一个点是:
赋值运算符只能重载类型成员不能重载全局函数。
默认成员函数不能写到全局。
同时我们的声明和定义也可以进行分离。
这里就是我们的日期类小于形的代码的声明和定义的分离。
但是我们的日期类可用的操作符远不止小于这一个操作符。
类似大于,减号,等于等操作符都可以用在日期类中。
我们这里可以像上面的代码一样各自书写一个大于,等于的代码出来。但是这样做的话就增加了代码的数量,减少了可读性。在这里我们还有什么其他的方法吗?
像这里我们先写一个==类型的重载,然后下来的代码就进行一个另一种方法的书写,如我们上面的代码一样。
这样就能简单的写出我们日期类的各种比较。
同时日期加天数和日期减日期也可以通过这种方式来完成。
要执行上面操作的话,我们首先就要算出每个月的天数。
这个操作我们写过很多次,这里就不再重复了。
再下来我们就只需要书写它的代码即可。
在这里我们如果使用的是引用的话,最后会提防因为销毁的原因出现问题,因此在这里我们采用的是这一种写法。
构造函数也是为了防止其销毁。
而且我们也可以由我们的+来引入+=的代码。
像上面左右的代码都是正确的,不过二者相对比左边的代码要更优一点。
这是因为左边的代码只需要创建两个对象,而右边的这种却要四个,+=的有一些亏。
同时我们的日期类还是其他的操作符可以对其使用。
类似我们的日期可以进行++操作。
只不过我们的++是单运算符。
但是众所周知在C语言中我们的++操作符分为了前置和后置。
因此在这里我们的代码到底是调用的哪一个?
用我们以前的知识来讲解。
前置++是返回++后的值,后置++是返回++前的值。
虽然它们的内部都要进行++操作,所以不能用同一个运算符重载替代。
为此,我们为后置++中的参数提供了int。
增加这个int并不是为了接收具体的值,这仅仅是为了占位,根前置++构成重载。
因为后置++需要进行创建对象,我们就将其牺牲掉了。
同时,前置++和后置++,在底层所代表的也不相同。
在这里我们可以看见,后置++我们的括号能没有任何东西,而前置++中则有加入一个随机的数来对其进行一个区分。
结尾:
到这里我们的又增加了对类和对象的了解,并且这几篇博客的内容都有关联,如果在哪里没有学好的话,可能会导致后序课程的乏力,因此有空的时候要对其进行复习。最后希望这篇博客能有所帮助。
相关文章:
C++——类和对象(3)
作者:几冬雪来 时间:2023年5月6日 内容:C类和对象内容讲解 目录 前言: 1.运算符重载(续): 2.赋值重载: 结尾: 前言: 在上一篇博客中我们再一次讲解了…...
itop-3568开发板驱动学习笔记(24)设备树(三)时钟实例分析
《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 生产者属性#clock-cells 属性clock-output-namesclock-frequencyassigned-clockclock-indicesassigned-clock-parents 消费者属性 设备树中的时钟信息以时钟树形式体现,时钟树包括时钟的属性和结…...
linux中使用docker部署微服务
目录 一、制作jar包(如果看一眼很简单,可以直接使用结尾的jar) 1.首先创建一个微服务 demo2 2.启动微服务(在DemoApplication上右键执行启动就行) 注意:其他操作导致的 可能遇到的报错 3.修改端口 4.新…...
操作系统考试复习—第三章 优先级倒置 死锁问题
当前OS广泛采用优先级调度算法和抢占方式,然而在系统中存在着影响进程运行的资源从而可能产生"优先级倒置"现象 具体解释为:在原本的调度算法设计中,高优先级进程可以抢占低优先级的CPU资源,先执行高优先级任务。但是存…...
OpenHarmony送显流程分析
OpenHarmony送显流程分析 引言 本文档主要记录OpenHarmony在渲染完成之后如何进行合成和送显流程的。这个过程牵涉的代码很多,而且流程也是比较繁琐的。所以我一定要坚持下来。千万不能半途而废,也不要想着一口气吃出一个胖子,路漫漫其修远兮…...
Java面试题字节流字符流
String 编码UTF-8 和GBK的区别 GBK编码:是指中国的中文字符,其实它包含了简体中文与繁体中文字符,另外还有一种字符 “gb2312”,这种字符仅能存储简体中文字符。 UTF-8编码:它是一种全国家通过的一种编码&#x…...
Self-Attention结构细节及计算过程
一、结构 上面那个图其实不是那么重要,只要知道将输入的x矩阵转换成三个矩阵进行计算即可。自注意力结构的输入为 输入矩阵的三个变形 Q(query矩阵)、K(key矩阵)、V(value矩阵)构成,…...
在Ubuntu18.04中安装uWebSockets库
目录 1.下载uWebSockets库2.下载uSockets3.安装openssl开发包4.编译首先说明这里使用的Ubuntu版本为18.04。 1.下载uWebSockets库 下载uWebSockets库有两种方式,一是终端,从Github中克隆uWebSockets库到Ubuntu本地文件夹,二是打开uWebSockets库下载链接自己下载到Windows,然…...
【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法
一、问题背景 因为fluent中支持的初始化无非三种类型。 1、Standard initialization 标准初始化 2、Hybridinitialization 混合初始化 3、FMG initialization FMG初始化 另外,还可以用UDF通过坐标判断的方式予以初始化。 但是这些初始化方法都没办法利用以前计算过…...
第二十九章 使用消息订阅发布实现组件通信
PubSubJS库介绍 如果你想在React中使用第三方库来实现Pub/Sub机制,PubSubJS是一个不错的选择。它是一个轻量级的库,可以在浏览器和Node.js环境中使用。 PubSubJS提供了一个简单的API,可以让你在应用程序中订阅和发布消息。你可以使用npm来安…...
Transformer的位置编码
1. 什么是位置编码,为什么要使用位置编码 简单来说位置编码就是给一个句子中的每个token一个位置信息,通过位置编码可以明确token的前后顺序关系。 对任何语言来说,句子中词汇的顺序和位置都是非常重要的。它们定义了语法,从而定…...
Python学习简记
做题时遇到的不知道的知识点会更新在此: python中的int()函数可以用于进制转换 该函数最为常见的使用是用于强制类型转换,实际上,它可以有两个参数 值得强调的是当传入两个参数时第一个参数一定要是字符串类型 字符串方法: lower(…...
windows搭建一个FTP服务器超详细
一.场景: 在开发过程中需要FTP文件上传下载功能,需要在本地或者服务器上搭建一个FTP服务器。 二.详细步骤: 1. 安装FTP服务器支持和配置IIS web服务器 打卡“启动关闭Window功能” 控制面板>程序>启动或关闭Windows功能 或者选择快…...
u01使用率100%报错归档满的问题
今天下午客户报数据库无法连接了,我也立刻登录查看 因为显示orcl1归档满了,我就登录查看磁盘组的空间,发现空间空余很多 就sqlpus登录了,发现u01使用率满了 [oracledb1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 …...
Packet Tracer - 配置扩展 ACL - 场景 2
Packet Tracer - 配置扩展 ACL - 场景 2 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 RTA G0/0 10.101.117.49 255.255.255.248 不适用 G0/1 10.101.117.33 255.255.255.240 不适用 G0/2 10.101.117.1 255.255.255.224 不适用 PCA NIC 10.101…...
最近面了12个人,发现这个测试基础题都答不上来...
一般面试我都会问一两道很基础的题目,来考察候选人的“地基”是否扎实,有些是操作系统层面的,有些是 python语言方面的,还有些… 深耕IT行业多年,我们发现,对于一个程序员而言,能去到一线互联网…...
JAVA基于Springboot框架的停车场管理系统开发实践和实现【附源码】
运行环境: jdk1.8idea/eclipsemaven3mysql5.6 项目技术: Java,Springboot,mybatis,mysql,jquery,html 该系统为停车场管理人员提供了对停车场中车辆,车位和财务的管理。操作员可以灵活地使用相关权限开展工作。在车位管理,车辆的停放和驶离、缴费&a…...
[230501] 4月29日考试真题第一篇|Temporary Pools
题目来源:http://t.csdn.cn/goCDT 正确率:6/10 目录 Temporary Pools 题目 Temporary Pools Paragraph 1: Temporary pools are freshwater habitats that retain water for only three to four months of the year or even shorter pe…...
Qt中QString, int等数据转换以及Qt与Halcon联编程序打包
一、Qt中QString, int等数据转换 在QT中,数值类型转为字符串类型,一般是可以使用 QString::number(); 示例: int num = 65; QString ab = QString::number(num); 其实还可以转为不同的进制字符串,比如 int num = 65; QString ab = QString::number(num,10); //十进…...
Android FlexboxLayout布局
FlexboxLayout 布局 一、简介二、使用三、功能详解FlexboxLayout属性flexWrapflexDirectionalignItemsjustifyContentalignContentdividerDrawableHorizontal、showDividerHorizontaldividerDrawableVertical、showDividerVerticaldividerDrawable、showDividermaxLine Flexbox…...
GNU编码标准(七)发布过程 相关内容摘录
仅对第7章The Release Process的内容进行摘录。 文章目录 7 发布过程7.1 configure应该如何工作7.2Makefile公约7.2.1 Makefile的一般公约7.2.2 Makefiles中的实用程序7.2.3 指定命令的变量7.2.4 DESTDIR:支持分阶段安装7.2.5 安装目录的变量7.2.6 用户标准目标7.2…...
DX算法还原
早在之前作者就写过一篇关于顶象的滑块验证,潦潦草草几句话就带过了。 出于互相学习的想法,给了一个大学生,奈何不讲武德把源码甩群里了,虽然在大佬们眼里不难, 不过拿着别人的东西乱传还是不太好。自认倒霉…...
多媒体API
私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…...
免费矢量图标网站有哪些?
图标作为UI设计的必要元素,矢量图标是质量的保证。据说完美的用户体验应该从灵活性开始 。在响应设计盛行的当下,灵活矢量图标的重要性不言而喻。在这种情况下,风格齐全、质量上乘的矢量图标网站堪称设计宝藏。在这篇文章中,我们…...
基于Redis的分布式限流详解
前言 Redis除了能用作缓存外,还有很多其他用途,比如分布式锁,分布式限流,分布式唯一主键等,本文将和大家分享下基于Redis分布式限流的各种实现方案。 一、为什么需要限流 用最简单的话来说:外部请求是不可…...
权限提升:漏洞探针.(Linux系统)
权限提升:漏洞探针. 权限提升简称提权,由于操作系统都是多用户操作系统,用户之间都有权限控制,比如通过 Web 漏洞拿到的是 Web 进程的权限,往往 Web 服务都是以一个权限很低的账号启动的,因此通过 Webshel…...
python-11-多线程模块threading
python使用多线程实例讲解 1 进程和线程 1.1 进程和线程的概念 进程(process)和线程(thread)是操作系统的基本概念。 进程是资源分配的最小单位,线程是CPU调度的最小单位。 线程是程序中一个单一的顺序控制流程,进程内一个相对独立的、可调度的执行单…...
动态gif图片如何在线做?轻松实现图片在线生成gif
常见的jpg、png格式的静态图片想要变成gif格式的动态图片时,要怎么办呢?有没有什么简单实用的gif制作工具呢? 一、什么工具能够在线制作gif? GIF中文网作为一款专业的gif制作(https://www.gif.cn/)工具&a…...
浅谈联网汽车安全漏洞
“智能网联汽车存在内生共性问题,即软硬件的漏洞后门,基于此进行的网络攻击可以直接带来勒索、盗窃、大规模车辆恶意操控风险,还有数据泄露等网络安全事件。如果内生的漏洞后门问题不解决,系统自身难保,很难谈系统安…...
深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台
深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台 一、认识SeaTunnel二、SeaTunnel 系统架构、工作流程与特性三、SeaTunnel工作架构四、部署SeaTunnel1.安装Java2.下载SeaTunnel3.安装连接器 五、快速启动作业1.添加作业配置文件以定义…...
东阳网站建设报价/长清区seo网络优化软件
为什么80%的码农都做不了架构师?>>> 一.安装sendmail跟mail 1.安装sendmail yum -y install sendmail* 2.安装mail yum -y install mailx 先start然后再restart service sendmail restart Shutting down sm-client: …...
mac上怎么安装wordpress/渠道网
以前不知道在循环中可以使用标签。最近遇到后,举得还是有其独特的用处的。我这么说的意思是说标签在循环中可以改变循环执行的流程。而这种改变不是我们以前单独使用break或者是continue能够达到的。下面还是看看实例吧。 outer1: for(int i 0;i<4;i){ Syste…...
网站程序有哪些/百度站长工具seo综合查询
神经网络(一)神经网络模型理解1.1 模型1.2 神经网络模型(前馈)1.3 建立神经网络模型1.4 多元分类1.5 循环神经网络与对称连接网络(二)神经网络模型实现2.1 代价函数2.2 反向传播2.2.1 数学推导(…...
wordpress添加用户/宣传推广
题意大概是这样,给你一个字符串,你可以进行的操作是这样的, 每次拿走这个串的第一个字母,或者最后一个字母,然后放到 一个新串的末尾(当然啦,新串一开始是为空的),当把旧…...
代做网站名称优化/成都网站建设软件
本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/15811977 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的…...
长春至少有500万人感染/抖音seo供应商
问卷调查demo已上传,欢迎大家指正,欢迎大家下载:https://download.csdn.net/download/lzb348110175/11085995 如果您没积分的话,可以私信/评论,然后发给您^_^ 之前也有看过Vue,但是一直都是处于大致知道点的…...