C++_18_重载运算符

重载运算符

意义:使该类对象使用该运算符时 与 该运算符本意不同

就是 起别的作用了 范围 在 重载的那个类中起效

在这里插入图片描述

语法:

返回值类型 operator 运算符(形参列表)
{函数体;
}

举例:

在这里插入图片描述

注意 :

​ 形参中 使用 & (引用)而不是 * (指针)

  • 1 直接操作对象:通过引用,可以直接对传递进来的对象进行操作,就好像在操作原始对象本身,而不需要通过指针的间接访问。
  • 2 引用在使用时不会涉及到指针的解引用操作,通常效率更高。
  • 3 避免空指针问题

使用位置:

1 全局函数:形参列表中第一个参数为符号左边的变量,第二个参数为符号右边的变量
2 成员函数:调用该函数的对象就是符号左边的变量,形参中的参数就是符号右边的变量

分析:【首选成员函数 前提是 符号左侧 是自定义的 】

1、分析运算符的运算对象的个数
2、分析运算符左边的运算对象是 自定对象 还是其他左边:是其他 只能全局函数实现 (必须使用友元)左边:自定义对象可以用使用 全局函数 重载运算符(参数个数 和 运算符对象的个数一致)也可以使用 成员函数 重载运算符(参数可以少一个) (推荐)	
判断全局or成员

看要要用重载后运算符使用地方的 左侧 运算对象是 自定义 对象 还是其他【系统提供的】

#  返回值类型 是  Data*   + 运算符 左边是 d01  右边是 d02 
#  此时 d01 d02 属于自定义 非系统所提供 所以可以成员函数 也可全局函数 Data  *d03 = d01 + d02;

优先使用成员函数 对其重载

示例1:

1 重载 +

方式一: 全局函数

全局函数对其重载 参数为2 个 【详细过程】

1 创建类与要实现的东西

在这里插入图片描述

开始解决报错 先选方式

2 开始 选择 那个方式

在这里插入图片描述

选择 全局函数或者成员函数 因为 运算符左侧 d01 是自定义的

3 开始重载

在这里插入图片描述

4 开始写 逻辑

也就是 你要重载目的实现的逻辑

目的 实现 d01 x + d02 x d01 y +d02 y

在这里插入图片描述

5 使用友元

在这里插入图片描述

6 为了打印d03 再多写一个函数 与重载+ 无关

在这里插入图片描述

7 开始运行:

代码:

#include <iostream>
using namespace std;
//当要重载的运算符左侧 运算对象  是自定义的【全局成员二选一】  还是系统提供的  【只能全局】
//   重载  +   方式一  全局函数 重载   当
class Data
{friend  Data* operator +(Data& d01, Data& d02);  //定义友元  
private:int x;int y;
public:
//无参构造Data(){x = 0;y = 0;}//都是为了给类的成员变量 x 和 y 进行初始化。//有参构造  写法1  用成员初始化列表的方式进行初始化Data(int x,int y):x(x),y(y){}// 写法2  构造函数体内进行赋值初始化。// Data(int x,int y)// {//     this->x = x;//     this->y = y;// }void showInfo()  // 为了打印出d03  展示{cout <<x <<"\t"<< y << endl;}
};
//为了使用 Data类的私有成员 所以对其使用友元操作
// 重载语法:    
//  返回值类型 operator运算符(形参列表)//使用 & (引用)而不是 * (指针)
//  1 直接操作对象:通过引用,可以直接对传递进来的对象进行操作,就好像在操作原始对象本身,而不需要通过指针的间接访问。
//  2 引用在使用时不会涉及到指针的解引用操作,通常效率更高。
//  3 避免空指针问题
Data* operator +(Data& d01, Data& d02)
{ Data *xxz = new Data();  // 使用指针是为了 创建堆区的 新对象 来接收  避免直接创建 的是成员变量会随着函数结束而销毁//写逻辑xxz->x = d01.x + d02.x;  // 此处的d 是指针xxz->y = d01.y + d02.y;return xxz; 
}int main(int argc, char const *argv[])
{Data d01(10,20);Data d02(10, 20);//   重载运算符  +  来使得 d01 x + d02 x d01 y +d02 y //  返回值类型 是  Data*   + 左边是 d01  右边是 d02  //  d01  属于自定义的 所以可以全局可以成员Data  *d03 = d01 + d02;d03->showInfo();  //打印结果return 0;
}
方式二: 成员函数

1 首先 成员函数 在类中定义 并且 不涉及友元

2 成员函数设置为公共的 不然访问不到

3 成员函数对其重载 参数为1 个 并且参数 是符号右边的变量

// 返回值类型 operator+(形参)
{}
#include <iostream>
using namespace std;
// 成员函数重载  +
class Data
{
private:int x;int y;
public:Data(){x = 0;y = 0;}Data(int x, int y) : x(x), y(y){}//  使用成员函数重载运算符 +  首先没有 友元 //  调用该函数的对象就是符号左边的变量//   参数 就是符号右边的变量  此时的d  代表 d02Data *operator+(Data &d){Data *xxz = new Data();xxz->x = this->x + d.x;   // this->x 代表就是 d01 的xxz->y = this->y + d.y;return xxz;}
};
int main(int argc, char const *argv[])
{Data d01(10, 20);Data d02(10, 20);// 想实现+重载计算d01 x + d02 x d01 y +d02 y// 因为符号未重载所以会报错Data *d03 = d01 + d02;return 0;
}

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

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

相关文章

JavaWeb中处理 Web 请求的方式总结

文章目录 JavaWeb中处理 Web 请求的方式总结1. 原始的 Servlet 方式1.1. 环境搭建**创建 Maven 或 Gradle 项目**&#xff1a;**添加 Servlet 依赖**&#xff1a;**创建 Servlet 类**&#xff1a;**配置项目**&#xff1a;**配置 Tomcat**&#xff1a; 1.2. 路由机制1.3. 示例代…

CPU调度算法之SJF(短作业优先)

摘要 CPU的短作业优先&#xff08;SJF, Shortest Job First&#xff09;任务调度算法是一种旨在提高系统响应速度和效率的调度策略。该算法通过优先执行预计运行时间最短的任务&#xff0c;从而减少平均等待时间&#xff0c;提高系统的整体吞吐量。虽然SJF算法在许多场景下表现…

《垃圾回收的算法与实现》-算法-摘抄

本文是书籍《垃圾回收的算法与实现》的摘抄&#xff0c;不涉及算法源码及步骤讲解模块。 预备 对象由头(header)和域(field)构成。 头&#xff1a;对象中保存对象本身信息的部分&#xff0c;主要含有以下信息&#xff1a;对象的大小和种类。 域&#xff1a;对象使用者在对象…

【Java毕业设计】基于SpringBoot+Vue+uniapp的农产品商城系统

文章目录 一、系统架构1、后端&#xff1a;SpringBoot、Mybatis2、前端&#xff1a;Vue、ElementUI4、小程序&#xff1a;uniapp3、数据库&#xff1a;MySQL 二、系统功能三、系统展示1、小程序2、后台管理系统 一、系统架构 1、后端&#xff1a;SpringBoot、Mybatis 2、前端…

还不懂BIO,NIO,AIO吗

BIO&#xff08;Blocking I/O&#xff09;、NIO&#xff08;Non-blocking I/O&#xff09;和 AIO&#xff08;Asynchronous I/O&#xff09;是 Java 中三种不同的 I/O 模型&#xff0c;主要用于处理输入 / 输出操作。 一、BIO&#xff08;Blocking I/O&#xff09; 定义与工作原…

YOLOV3实现越界检测——智能安防

目录 应用前景 1. 安全监控系统 2. 家庭安防系统 3. 无人机监控 4. 交通管理 5. 无人驾驶技术 6. 大型活动现场 代码说明 1. YOLO 模型加载 2. 摄像头视频流捕获 3. 安全区域绘制 4. YOLOv3 目标检测 5. 过滤和标记人类目标 6. 入侵检测 7. 结果显示和退出 总结…

断点回归模型

断点回归&#xff08;Regression Discontinuity Design, RDD&#xff09;是一种准实验设计方法&#xff0c;用于评估政策或其他干预措施的效果。这种方法利用了一个清晰的阈值或“断点”&#xff0c;在这个阈值上&#xff0c;处理状态&#xff08;例如是否接受某种干预&#xf…

DevC++编译及使用Opencv

1.依赖 需要如下依赖&#xff1a; DevC11Opencv4.10.0CMake.exe 整个安装过程参考下面的文章&#xff1a;https://blog.csdn.net/weixin_41673576/article/details/108519841 这里总结一下遇到的问题。 2.问题 2.1 DevC安装路径 一定不要有空格&#xff01;&#xff01;否则…

tekton pipeline workspaces

tekton pipeline workspace是一种为执行中的管道及其任务提供可用的共享卷的方法。 在pipeline中定义worksapce作为共享卷传递给相关的task。在tekton中定义workspace的用途有以下几点: 存储输入和/或输出在task之间共享数据secret认证的挂载点ConfigMap中保存的配置的挂载点…

阿里中间件——diamond

一、前言 最近工作不忙闲来无事&#xff0c;仔细分析了公司整个项目架构&#xff0c;发现用到了很多阿里巴巴集团开源的框架&#xff0c;今天要介绍的是中间件diamond. 二、diamond学习笔记 1、diamond简介 diamond是一个管理持久配置&#xff08;持久配置是指配置数据会持久化…

全球热门剪辑软件大搜罗

如果你要为你的视频进行配音那肯定离不开音频剪辑软件&#xff0c;现在有不少音频剪辑软件免费版本就可以实现我们并不复杂的音频剪辑操作。这次我就给你分享几款能提高剪辑效率的音频剪辑工具。 1.福晰音频剪辑 链接直达>>https://www.foxitsoftware.cn/audio-clip/ …

研究生考试报名照片要求解读及被拒原因分析

全国硕士研究生考试报名近年来热度不减&#xff0c;一般在每年九月下旬开始&#xff0c;往往这个时候我们就要开始准备考研证件照了。但是有很多朋友手册考研可能会因为各种问题导致考研证件照不符合要求&#xff0c;那么今天报名电子照助手就带大家了解一下目前考研报名照片的…

参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制

关联比赛: 2021第二届云原生编程挑战赛2&#xff1a;实现一个柔性集群调度机制 参赛心得 历时快两个月的第二届云原生编程挑战赛结束了&#xff0c;作为第一次参赛的萌新&#xff0c;拿下了28名的成绩&#xff0c;与第一名差了19万分&#xff0c;因为赛制时间太长&#xff0c…

计算机毕业设计选题推荐-作品分享交流平台(摄影、绘画、书法)-Java/Python项目实战(亮点:分享作品到微博、浏览历史、数据可视化)

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

局域网一套键鼠控制两台电脑(台式机和笔记本)

服务端&#xff08;有键盘和鼠标的电脑作为服务端&#xff09; 下载软件 分享文件&#xff1a;BarrierSetup-2.3.3.exe 链接&#xff1a;https://pan.xunlei.com/s/VO66rAZkzxTxVm-0QRCJ33mMA1?pwd4jde# 配置服务端 一&#xff0c; 二&#xff0c; 客户端屏幕名称一定要和…

yolo txt格式转coco json格式

yolo txt格式转coco json格式 **问题背景&#xff1a;**下载coco128数据集&#xff0c;使用yolov5模型进行推理并使用pycocotools.cocoeval 对预测结果进行精度计算。 coco128 下载地址&#xff1a;https://tianchi.aliyun.com/dataset/108650 解压缩cocozip之后可以看到如下的…

全面掌握信息架构:数字化转型的最佳实践与应用指南

在全球化和信息化高度发展的今天&#xff0c;企业正面临前所未有的挑战与机遇 数字化转型已成为各大企业保持竞争力的必由之路&#xff0c;而成功的数字化转型离不开稳健且灵活的信息架构。《信息架构&#xff1a;商业智能&分析与元数据管理参考模型》正是一本为企业提供全…

数学建模笔记—— 主成分分析(PCA)

数学建模笔记—— 主成分分析 主成分分析1. 基本原理1.1 主成分分析方法1.2 数据降维1.3 主成分分析原理1.4 主成分分析思想 2. PCA的计算步骤3. 典型例题4. 主成分分析说明5. python代码实现 主成分分析 1. 基本原理 在实际问题研究中,多变量问题是经常会遇到的。变量太多,无…

Java中的类加载与卸载机制详解

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;类加载和类卸载机制是Java运行时环境的重要组成部分。理解类的加载与卸载不仅有助于深入掌握JVM的运行原理&#xff0c;还可以帮助开发者优化程序性能&#xff0c;特别是在内存管理和应用程序生命周期管理中起到关键作用…

《零散知识点 · Kafka 知识拓展》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…