5.2————运算符重载

news2024/9/21 20:37:19

对于基本的数据类型,C++提供来许多预先定义的运算符,如“+,-,*,/”等,他们的运用大家应该已经很熟悉了。那么我们引入运算符重载的概念到底是为什么,比如是我们的加号可以完成基本数据类型的相加,那么我们想进行两个类的相加是否可以,带着这个疑问,我们验证一下。

在C++中引入运算符重载,就是为了解决不是基本类型的 运算,比如说类的相加。

下面我们来编写运算符重载函数来实现类的相加。

在使用的时候可以显示使用,也可以隐式的使用,都是正确的

C++运算符重载的规则:

 1)C++中绝大部分的运算符允许重载,不能重载的运算符只有以下几个:

. 成员访问运算符

.* 成员指针访问运算符

:: 作用域运算符

sizeof 长度运算符

?: 条件运算符

2)C++语言只能对已有的C++运算符进行重载,不允许用户自定义新的运算符。

3)运算符重载是针对新类型数据的实际需求,对原有运算符进行适当的改造完成的。一般来讲,重载的功能应当与原有的功能相似(如用“+”实现加法,用“-”实现减法)。

4)重载不能改变运算符的操作对象(即操作数)的个数。

5)运算符重载函数的参数至少应有一个类对象(或类对象的引用)

我们的运算符重载函数至少有一个类对像

6)重载不能改变原有的运算符的优先级.

7)运算符重载函数可以是普通成员,也可以是类的成员函数,还可以是类的友元函数。

8)一般而言,用于类对象的运算符必须重载,但是赋值运算符“=”例外,不需要重载。



友元运算符重载函数

友元函数的概念:

当我们类的数据成员声明为私有时,我们定义普通的运算符重载函数重载类的运算符,我们在类外不能访问私有成员,我们对象的数据就不能修改了,我们访问类的私有成员就会报错。

为了解决这个问题,我们可以讲重载函数定义为友元函数,友元函数的形参为类的对象时,我们可以访问到,所以,我们讲重载函数声明为类的友元函数就可以了。

1)运算符重载函数operator@可以返回任何类型,甚至可以是void类型,但通常返回类型与它所操作的类型相同,这样可以使重载运算符用在复杂的表达式中。

2)有的运算符不能定义为友元运算符的重载函数,如赋值运算符“=”,下标运算符“[]”,函数调用运算符“()”等。

成员运算符重载函数

在C++中,可以把运算符重载函数定义成某个类的成员函数,称为成员运算符重载函数。

在成员运算符重载函数的形参列表中,若运算符是单目的,则参数表为空的;若运算符是双目的,则参数表中只有一个操作数;与普通重载函数,友元重载函数相比成员重载函数的形参少一个,因为成员函数的类可以访问直接,所以就少一个参数。

 

 


未完待续…………

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

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

相关文章

mysql 修改最大连接数max_connections

mysql 修改最大连接数max_connections 1、编辑mysql service文件2、编辑mysql 配置文件3、重启MySQL服务4、查看max_connections 1、编辑mysql service文件 查找mysql service文件 find / -name mysql*.service先备份再编辑 cp /usr/lib/systemd/system/mysqld.service /usr…

【C++ STL】 那年我双手插兜,学会了stackqueuepriority_queue基础知识及其模拟实现【对话情景版】

文章目录 📍前言C STL 之 stack&queue基础知识及其模拟实现📍容器适配器🎈什么是适配器?🎈STL标准库中stack和queue的底层结构🎈deque的简单介绍(了解)📌deque的原理介绍📌deque…

基于SSM的书画拍卖网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

软件系统外包开发流程及注意事项

当企业发展到一定规模后,市场上通用的软件系统往往就无法满足自身的业务需要,这时就需要企业开发属于自己软件系统。软件系统是一项比较复杂的系统工程,从需求分析、代码开发到最后的上线需要比较长的时间,需要有系统的管理方法才…

问题记录:Datax+Datax-web2.1.2的一系列问题

问题1:DataX报错解决办法 - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数 问题原因: 正如中文字面上所说,DataX的配置有问题,单个channel的bps值不能为空,也不能为非正数。…

教你怎么翻译英语语音

在当今全球化的时代,跨语言交流是一种常态。无论你是在国外旅游时无法理解当地人说的英文意思,还是因为职业需要与国外客户、供应商进行交流,这时候通过翻译英文语音就可以帮助你获取对话内容,缩短沟通时间和提升工作效率。那对于…

【windows批处理batch】.bat文件循环判断语句

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、…

计算机毕业论文内容参考|基于java的学生成绩分析系统的设计与实现

文章目录 导文摘要前言课题背景国内外现状与趋势课题内容相关技术与方法介绍技术分析技术设计系统架构设计数据库设计安全认证设计数据可视化设计技术实现后端实现安全认证实现数据可视化实现总结与展望本文总结后续工作展望导文 基于java的学生成绩分析

【逆向工程核心原理:TLS回调函数】

TLS 代码逆向分析领域中,TLS(Thread Local Storage,线程局部存储)回调函数(Callback Function)常用反调试。TLS回调函数的调用运行要先于EP代码的执行,该特征使它可以作为一种反调试技术的使用…

【经验总结】你想知道的BGA焊接问题都在这里

BGA是一种芯片封装的类型,英文 (Ball Grid Array)的简称,封装引脚为球状栅格阵列在封装底部,引脚都成球状并排列成一个类似于格子的图案,由此命名为BGA。 主板控制芯片诸多采用此类封装技术,采用BGA技术封装的内存&am…

聚焦 TimescaleDB VS TDengine 性能对比报告,五大场景全面分析写入与查询

基于第三方基准性能测试平台 TSBS(Time Series Benchmark Suite) 标准数据集,TDengine 团队分别就 TSBS 指定的 DevOps 中 cpu-only 五个场景,对时序数据库(Time Series Database,TSDB)Timescal…

ACT:非对称协同训练的半监督域自适应医学图像分割

文章目录 ACT: Semi-supervised Domain-Adaptive Medical Image Segmentation with Asymmetric Co-training摘要本文方法实验结果 ACT: Semi-supervised Domain-Adaptive Medical Image Segmentation with Asymmetric Co-training 摘要 作者建议以统一的方式利用标记的源域和…

nginx实现正向代理

1.下载nginx nginx: download 选择自己需要的版版本下载下来 2.解压文件修改ngixn.conf配置文件 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout…

MySQL基础(三十六)其他数据库日志

千万不要小看日志。很多看似奇怪的问题,答案往往就藏在日志里。很多情况下,只有通过查看日志才能发现问题的原因,真正解决问题。所以,一定要学会查看日志,养成检查日志的习惯,对提升你的数据库应用开发能力…

【星戈瑞】Sulfo-CY3-COOH磺化/水溶性Cyanine3羧酸1121756-11-3

Sulfo-CY3 COOH是一种荧光染料,其分子结构中含有COOH官能团,最大吸收波长为550纳米左右,可以通过分光光度计等设备进行检测。Sulfo-CY3 COOH是一种带有羧基的荧光染料,可以与含有氨基的生物分子通过偶联反应形成共价键&#xff0c…

TMP的阴影性能如何

1)TMP的阴影性能如何 ​2)CommandBuffer.DrawMeshInstanced无法画阴影问题 3)Unity编辑器在Require大量加载Lua文件时,经常报出not enough memory 4)场景制作的时候,2D资源受后处理调色影响比较大 这是第33…

JVM面试题(一)

JVM内存分哪几个区,每个区的作用是什么? java虚拟机主要分为以下几个区: JVM中方法区和堆空间是线程共享的,而虚拟机栈、本地方法栈、程序计数器是线程独享的。 (1)方法区: a. 有时候也成为永久代,在该区内…

开始梳理大学课程体系(一)--万字C语言总结上

C语言 前言第一章 初识C语言1.1 C语言的起源1.2 选择C语言的理由1.3 使用C语言的7个步骤 第二章 数据和C2.1 变量和常量2.1.1变量定义2.1.2 常量的定义 2.2 数据类型关键字 第三章 运算符、表达式和语句3.1 基本运算符3.1.1 算术运算符3.1.2 关系运算符3.1.3 逻辑运算符3.1.3 赋…

关于接口可维护性的一些建议 | 京东云技术团队

作者:D瓜哥 在做新需求开发或者相关系统的维护更新时,尤其是涉及到不同系统的接口调用时,在可维护性方面,总感觉有很多地方差强人意。一些零星思考,抛砖引玉,希望引发更多的思考和讨论。总结了大概有如下几…

TOB企业生态体系构建的核心要素有哪些?

To B市场作为一个非常庞大的领域,其复杂度和多元化水平,要远远要高于针对于消费者群体推进的市场。尤其近年来,消费互联网成为过去式,爆发式增长的时代结束,让资本、媒体的目光开始聚焦到以B2B企业所代表的产业互联网身…