C++入门基础知识147—【关于C++ 一元运算符重载】

成长路上不孤单😊😊😊😊😊😊

【14后😊///C++爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】

今日分享关于C++  一元运算符重载的相关内容!

关于【C++一元运算符重载】

目录:

  • 一、什么是一元运算符重载
  • 二、一元运算符重载的例子
  • 三、一元运算符重载的实现方式
  • 四、一元运算符重载的应用场景
  • 五、一元运算符和二元运算符的区别
  • 六、一元运算符重载实例1
  • 七、一元运算符重载实例2

一、什么是一元运算符重载

一元运算符重载‌是指在C++中,通过定义一个类的成员函数或友元函数,使得一个运算符只与一个操作数进行运算。这种重载方式使得运算符可以用于自定义类型,从而赋予其新的功能。

二、一元运算符重载的例子

  1. 负号(-)重载‌:可以通过成员函数或友元函数来实现。例如,定义一个坐标类Coordinate,可以通过重载负号运算符来实现坐标的取反操作。在成员函数重载中,不需要传递任何参数,因为隐含的this指针代表了一个操作数‌1。
  2. 自增(++)和自减(-)重载‌:这些运算符也可以通过成员函数来实现。例如,对于Student类,可以重载前置自增和自减运算符,使得Student对象的属性值增加或减少。在实现时,需要返回对象的引用,以便在表达式中可以继续使用该对象‌2。

三、一元运算符重载的实现方式

  1. 成员函数重载‌:在类内部定义一个成员函数,使用operator关键字后跟运算符符号。由于是一元运算符,不需要传递额外的参数,但隐含的this指针代表了一个操作数。
  2. 友元函数重载‌:在类外部定义一个友元函数,使用operator关键字后跟运算符符号。这种方式允许该函数访问类的私有和保护成员‌12。

四、一元运算符重载的应用场景

一元运算符重载常用于自定义类型,使得代码更加直观和易于理解。例如,在数学计算、物理模拟、游戏开发等领域中,自定义类型常常需要使用到各种运算符,通过重载这些运算符,可以使代码更加简洁和高效‌34。

通过一元运算符重载,C++程序员可以赋予运算符新的功能,使其适用于自定义类型,从而增强代码的可读性和灵活性。

五、一元运算符和二元运算符的区别

操作数数量
‌一元运算符和二元运算符的主要区别在于所需的操作数数量。‌一元运算符只需要一个操作数,而二元运算符需要两个操作数。‌

一元运算符的定义和例子
一元运算符只需要一个操作数。例如,在C语言中,++a和--a都是一元运算符,分别表示自增和自减操作。

二元运算符的定义和例子
二元运算符需要两个操作数。例如,加法(+)、减法(-)、乘法(*)、除法(/)等都是二元运算符。

运算等级和运算的本质
运算等级是指不同运算的优先级和结合性。数学上的运算本质上是集合之间的映射关系,通过已知量的组合获得新的量。

六、一元运算符重载实例1

在C++中,一元运算符重载通常是通过定义一个带有一个参数的非成员函数来实现的。如果运算符是必须作为成员函数实现的(如赋值 = 或取址 ->),则需要将其定义为成员函数。

以下是一个简单的例子,展示了如何重载一元减号运算符 - 用于自定义数据类型 MyNumber

在这个例子中,我们定义了一个名为 MyNumber 的简单类,并重载了一元减号运算符 -,返回一个新的 MyNumber 对象,其 value 成员是原对象 value 的相反数。当我们对 MyNumber 对象使用一元减号时,会调用这个重载的运算符函数。

七、一元运算符重载实例2

一元运算符只对一个操作数进行操作,接下来是另一个一元运算符的实例:

  • 递增运算符( ++ )和递减运算符( --
  • 一元减运算符,即负号( - )
  • 逻辑非运算符( ! )

一元运算符通常出现在它们所操作的对象的左边,比如 !obj、-obj 和 ++obj,但有时它们也可以作为后缀,比如 obj++ 或 obj--。

下面的实例演示了如何重载一元减运算符( - )。

当上面的代码被编译和执行时,它会产生下列结果:

希望上面的实例能够帮您更好地理解一元运算符重载的概念,我们也可以尝试重载逻辑非运算符( ! )。

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

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

相关文章

2022年蓝桥杯JavaB组 省赛 题目解析(含AC_Code)

目录 前言(必读)第一题:星期计算 (简单)问题描述思路AC代码总结 第二题 山 (简单)问题描述题目分析山形数定义解题思路代码实现解析代码详解回文和“山形”判断函数主函数 AC代码复杂度分析 总结…

NLP论文速读(微软出品)|使用GPT-4进行指令微调(Instruction Tuning with GPT-4)

论文速读|Instruction Tuning with GPT-4 论文信息: 简介: 这篇论文试图解决的问题是如何通过指令调优(instruction-tuning)提升大型语言模型(LLMs)在执行新任务时的零样本(zero-shot&#xff0…

C++20 概念与约束(3)—— 约束的进阶用法

《C20 概念与约束(1)—— SFINAE》 《C20 概念与约束(2)—— 初识概念与约束》 ●《C20 概念与约束(3)—— 约束的进阶用法》 1、再谈约束主句与从句 上一篇文章中提到过约束可以无限嵌套。末尾也提到不…

c#使用COM接口设置excel单元格宽高匹配图片,如何计算?

c#使用COM接口设置excel单元格宽高如何换算 在实际工作中,经常需要在excel中插入图片。并设置单元格与图片对齐。但是excel单元格的宽度和高度使用不同的单位。单元格的宽度以字符宽度为单位,而高度以点为单位。如果按照实际值来设置,例如设…

pySpark乱码

1.现象 python的变量包含中文,用format放入SQL中时,出现乱码 2.原因 python2默认编码是ascii 3.解决办法 使用python3,并且把所有print,改成带括号的 4.在pyspark中加入参数 spark.pyspark.driver.python/usr/bin/python3 …

从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化20241112

🎯 从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化 🔎 引言 随着 MySQL 的不断升级,从 5.7 到 8.0,不仅性能得到提升,其对 SQL 标准的严格执行也显著提高。GROUP BY 的行为变化就是一个典型例子。…

【activiti工作流源码集成】springboot+activiti+mysql+vue+redis工作流审批流集成整合业务绑定表单流程图会签驳回

工作流集成实际项目案例,demo提供 源码获取方式:本文末个人名片直接获取。 前言 activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,请假审批demo从流程绘制到审批结束实例。 一、项目形式 springbootvue…

如何判断FPGA能够接入几个Camera

摘要:仅记录判断FPGA能够接入几个Camera的思路 在FPGA中,"quad"和"bank"是两个不同的概念,它们通常用于描述FPGA中的高速串行收发器(如Xilinx的GTX或GTH收发器)的组织方式。 Quad: 一个Quad包含…

CKA认证 | Day2 K8s内部监控与日志

第三章 Kubernetes监控与日志 1、查看集群资源状态 在 Kubernetes 集群中,查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释,帮助你更好地管理和监控 Kubernetes 集群。 1.1 查看master组件状态 Kubernetes 的 Master 组件包…

推荐一款好用的postman替代工具2024

Apifox 是国内团队自主研发的 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,是非常好的一款 postman 替代工具。 它通过一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好接口文档,接口调试、数据 Mock、接口…

《自动化运维》

一、引言 在当今信息技术飞速发展的时代,企业的 IT 系统规模不断扩大,复杂性日益增加。传统的手工运维方式已经无法满足高效、稳定、可靠的运维需求。自动化运维作为一种先进的运维理念和技术手段,正逐渐成为企业提升 IT 运维效率和质量的关键…

相机光学(四十二)——sony的HDR技术

1.概述 索尼的HDR技术包括以下几种,这些技术共同构成了索尼在HDR领域的技术矩阵,旨在提供更宽广的动态范围、更丰富的色彩表现以及更真实的光影效果: Multi-frame HDR(多帧异曝光HDR):这是一种通过不同曝光时间图像的多帧合成来实…

Springboot环境搭建详解

springboot学习视频记录: 笔记: a:Springboot maven常见依赖、配置文件笔记-CSDN博客 b:Springboot环境搭建详解-CSDN博客 day01 6:springboot的parent和starter依赖- a 7:启动类的位置配置- b 8&am…

uniapp+vue2 设置全局变量和全局方法 (兼容h5/微信小程序)

一,Vue.prototype.xxx 问题:js可以使用,但是微信小程序,在template 模板无法使用 二,globalData 问题同上,优点就是,.js文件也可以使用。但是微信小程序,在template 模板无法使用…

gdb调试redis。sudo

1.先启动redis-server和一个redis-cli。 2.ps -aux|grep reids查看redis相关进程。 3.开始以管理员模式附加进程调试sudo gdb -p 2968.注意这里不能不加sudo,因为Redis 可能以 root 用户启动,普通用户无法附加到该进程。否则就会出现可能下列情形&#…

uniapp 设置安全区域

<!-- 获取安全区域 --> <script setup lang"ts"> import { computed, ref } from vuelet systemType ref(1) // #ifdef APP-PLUS || H5 || APP-PLUS-NVUE systemType.value 1 const { safeAreaInsets } uni.getSystemInfoSync() console.log(safeAre…

YUM 的使用

YUM 是一个用于 Fedora 和 Red Hat 以及 CentOS 操作系统的前端软件包管理器&#xff0c;它可以自动处理依赖关系并一次性安装所有必需的软件包。 镜像站点选择 1. 备份原有的镜像源配置文件 系统默认的 yum 镜像源配置文件存储在 /etc/yum.repos.d/ 目录下&#xff0c;可以…

力扣 LeetCode 242. 有效的字母异位词(Day3:哈希表)

解题思路&#xff1a; 哈希表三种数据结构的选择 1. 数组&#xff1a;适用于数据量小的情况 2. set&#xff1a;适用于数据量大的情况 3. map&#xff1a;适用于key-value 什么时候用哈希表&#xff1f; 给你一个元素&#xff0c;判断该元素在这个集合里是否出现过 本题使…

【MYSQL】锁详解(全局锁、表级锁、行级锁)【快速理解】

目录 一、全局锁 二、表级锁 1.表锁 2.元数据锁 3.意向锁 三、行级锁 1. 行锁 2.间隙锁 3.临建锁 锁是处理并发情况下&#xff0c;对数据的一致性的关键因素&#xff0c;也是并发情况下对效率影响非常大的。 1、全局锁&#xff1a;锁定表中所有数据。 2、表级锁&#xff1a;…

蓝桥杯每日真题 - 第11天

题目&#xff1a;&#xff08;合并数列&#xff09; 题目描述&#xff08;14届 C&C B组D题&#xff09; 解题思路&#xff1a; 题意理解&#xff1a;给定两个数组&#xff0c;目标是通过若干次合并操作使两个数组相同。每次合并操作可以将数组中相邻的两个数相加&#xff…