c++重载(运算符)

news2024/12/24 8:24:29

1)C++入门级小知识,分享给将要学习或者正在学习C++开发的同学。

2)内容属于原创,若转载,请说明出处。

3)提供相关问题有偿答疑和支持。

对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。

operator是c++中的关键字;

重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。一般的运算符的重载函数分为两类,一类是在类的内部的成员函数,一类是全局函数,不在类的内部的函数;与其他函数一样,重载运算符有一个返回类型和一个参数列表。


Box operator+(const Box&);  类中的成员函数定义格式


Box operator+(const Box&, const Box&);  非类的成员函数,如静态函数,由于不能使用对象访问,因此对于双目运算符,必须传递两个参数
看一个例子来简单认识一下操作符==的重载:

一般的重载包括单目运算符的重载(++、--等),以及双目运算符的重载(+、-、*、/等),多目运算符的重载,但是对于多目的一般很少使用;
首先看一个双目运算符的重载:


上面的例子实现双目运算符+的操作,也就是当两个不是基本类型的对象相加的是时候编译器尝试重新解释运算符,如果定义了符合的类型编译器就会尝试去调用,如上面的实现operator+就是重现解释的函数;为了安全以及效率,我们可以将上面的形式修改成如下:使用引用形式

同样对于一个不属于类的全局函数的重载方式,与类中的重载方式有点不同:

单目运算符的重载:单目运算符是只有一个操作数的运算,如取负号-、++、--等等
但是对于++、--有前加加或者是后加加,
C++约定,在自增(自减)运算符重载函数中,增加一个int类型的形参,就是后置自增(自减)运算符函数。
如下例子:

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

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

相关文章

算法:链表

目录 链表的技巧和操作总结 常用技巧: 链表中的常用操作 题目一:反转一个单链表 题目二:链表的中间结点 题目三:返回倒数第k个结点 题目四:合并两个有序链表 题目五:移除链表元素 题目六&#xff…

【快速排序】| 详解快速排序 力扣912

🎗️ 主页:小夜时雨 🎗️专栏:快速排序 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/sort-an-array/ 我们上道题讲过快速排序的核心代码&a…

三元表达式解析器

题意:其实本质上就是三目运算 ,只不过跟我们以往的三目运算不同的是,这一系列的运算可以把T 和 F 都参与到运算中。设x5 表达式 x>2?T:F 最终返回T. 思路: 1.从后往前遍历字符数组 2.如果遇到的是 非?和 非&…

[C++][设计模式][中介者模式]详细讲解

目录 1.动机2.模式定义3.要点总结 1.动机 在软件构建过程中,经常会出现多个对象相互关联的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化在这种情况下,可以…

2-自动驾驶关键技术框架

框架 来自《自动驾驶汽车决策与控制》这本书 三大技术 车载平台的关键技术: 环境感知技术:这是自动驾驶车辆能够“看”和“感知”周围世界的技术。它包括使用摄像头、雷达、激光雷达(Lidar)和超声波传感器来检测和识别道路、障…

Efficient Unified Demosaicing for Bayer and Non-Bayer Patterned Image Sensors

这篇文章是 2023 ICCV 的一篇文章,主要介绍一套统一的去马赛克的算法框架的 由于手机 Camera 上 CMOS 的单个 pixel size 比较小,所以现在很多手机的 Camera CMOS 会采用一些独特的非 Bayer 模式的 CFA (Quad, Nona 以及 Q X Q) 等,这类非 B…

redis实战-添加商户缓存

为什么要使用缓存 言简意赅:速度快,好用缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力实际开发中,企业的数据量,少…

vs 2019 Release模式下采用Debug断点调试

由于Release默认模式是不能调试的,有时候我们需要调试,属性更改如下所示: 再次启动程序,就可以进行调试

C语言 for循环

for循环语句 //初始化 //判断 //调整 for(表达式1; 表达式2; 表达式3;)循环语句; 例: for循环里break for循环里continue 注:1.不可在for循环体内修改循环变量,防止for循环失去控制 2.建议for语句的循环控制变量的…

qiankun微前端:qiankun+vite+vue3+ts(未完待续..)

目录 什么是微前端 目前现有的微前端 好处 使用 子应用的页面在主应用里显示 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 我的理解就是将一个大型的前端应用拆分成多个模块,每个微前端模块可以由…

《编译原理》阅读笔记:p25-p32

《编译原理》学习第 5 天,p25-p32总结,总计 8 页。 一、技术总结 1.lexical lexical这个单词后续会经常用到,所以首先要搞懂它的英文意思,不然看到中文的“词法,语法,文法”这三个词的时候就会懵了——l…

【操作系统期末速成】EP05 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️2.1 考点十一:死锁的概念与预防2.2 考点十二:死锁的避免一银行间算法2.1 考点十三:死锁的检测与解除 一、前言🚀🚀&#x…

Oracle、MySQL、PostGreSQL、SQL Server-空值

Oracle、MySQL、PostGreSQL、SQL Server-null value 最近几年数据库市场百花齐放,在做跨数据库迁移的数据库选型时,除了性能、稳定、安全、运维、功能、可扩展外,像开发中对于值的处理往往容易被人忽视, 之前写过一篇关于PG区别O…

Linux下安装RocketMQ:从零开始的消息中间件之旅

感谢您阅读本文,欢迎“一键三连”。作者定会不负众望,按时按量创作出更优质的内容。 ❤️ 1. 毕业设计专栏,毕业季咱们不慌,上千款毕业设计等你来选。 RocketMQ是一款分布式消息中间件,具有高吞吐量、低延迟、高可用性…

【工具分享】SQLmap

文章目录 工具介绍安装方式环境准备安装 sqlmap 工具介绍 sqlmap 是一个非常强大的自动化 SQL 注入工具,主要用于渗透测试和安全审计。它能够检测和利用 SQL 注入漏洞,进而访问数据库服务器。 GitHub:https://github.com/sqlmapproject/sql…

【Vue】单向和双向数据绑定

在 Vue.js 中,数据绑定可以分为单向数据绑定和双向数据绑定两种类型。 单向数据绑定 单向数据绑定是指数据从模型流向视图,即数据的变化会自动反映到视图中,但视图中的变化不会自动反映回模型。Vue.js 中的单向数据绑定主要通过以下方式实现…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术,可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法,特别适合于展示变量之间的相关性,对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先,确保你已经安装了matplotlib…

机器学习引领教育革命:智能教育的新时代

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 📒1. 引言📙2. 机器学习在教育中的应用🌞个性化学习🌙评估与反馈的智能化⭐教学资源的优…

Ubuntu qemu虚拟机 NAT网络 第一次使用,VNC访问

比如Windows 7 虚拟机 要手工设置网络

什么是等级保护2.0?

等保的全称是信息安全等级保护,是《网络安全法》规定的必须强制执行的,保障公民、社会、国家利益的重要工作。 官方定义:等级保护是对信息和信息载体按照重要性等级分级别进行保护的一种工作,指对国家重要信息、法人和其他组织及公…