C++基础(6)——类和对象(运算符重载)

news2024/11/20 14:27:48

前言

本文主要介绍了C++中运算符重载的基本知识。

4.5.1:加号运算符重载(成员函数和全局函数都可实现)

运算符重载:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型

1:成员函数重载+号,this指针指向的是+号左侧的对象

本质:Person p3 = p1.operator+(&p2);

想用引用作为函数的返回值就要先在堆区开辟内存,栈区的局部变量会在函数执行完之后释放

2:全局函数实现运算符重载

本质: Person p3 = operator+(p1, p2);

operator+函数可以实现重载,创建一个就只有类名和Person不同的Human类,同时通过全局函数来实现运算符重载,这是编译器会根据operator+()函数参数的不同来选择使用那一个函数

 根据参数不同选择不同的重载函数,即运算符重载也可以发生函数重载

对于内置的数据类型的表达式的运算符是不能改变的

4.5.2:左移运算符重载(全局函数实现)

重载左移运算符可以实现自定义数据类型的输出

左移运算符如果使用成员函数进行重载会出现的问题

void operator<<(cout)会简化成 p << cout,p是一个对象

cout是输出流ostream的一个对象

当operator<<重载函数的返回值是void类型时

但是如果想要在cout << p后面再使用<<就会报错了,因为没有用到链式的原则

当operator<<重载函数的返回值是ostream&类型时,就可以像普通的使用cout那样使用,也用到了函数重载的原理

4.5.3:++递增运算符重载

1:前置递增

结合友元、<<运算符重载,可以实现前缀++重载的效果

假如对myint执行两次++的操作,且将operator++的返回类型改成MyInt,而不是引用,那么会新构建一个对象,并对新对象进行操作

 使用引用&的目的是为了一直对一个对象进行操作,改成引用&输出结果就是想要的了

2:后置递增(为了和前置++区分,要使用到函数的占位参数)

后置++使用值返回或者引用返回两种情况

引用返回:

值返回:

4.5.4:赋值运算符重载

如果使用默认的=运算符进行一些对象的赋值,可能会出现一些浅拷贝直接值赋值的问题

 如果重写析构函数进行delete,就会出现内存多次释放的问题

 进行赋值运算符重载

4.5.5:关系运算符重载

这里重新实现>运算符

改成引用之后再进行参数传入就不会创建一个新的对象,也就不会出现多次delete内存的情况

4.5.6:函数调用运算符()重载,仿函数、匿名对象

1:仿一个返回值是void,参数是string的()

2:仿一个返回值为int,入口参数(int,int)

总结

以上就是本文的全部内容,非常感谢你能看到这。

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

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

相关文章

如何使用 RestTemplate 调用 RESTful API

如何使用 RestTemplate 调用 RESTful API&#xff1f; 在开发 Web 应用程序时&#xff0c;调用 RESTful API 是一个常见的任务。为了调用 RESTful API&#xff0c;我们需要使用 HTTP 协议向 API 发送请求&#xff0c;并解析 API 返回的响应。为了简化这个过程&#xff0c;可以…

为生信写的Python简明教程 | 视频6

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

【前端特效篇】过渡与动画

变形和动画都是前端开发过程中&#xff0c;用来提高用户体验的一种方式。增加一些动效&#xff0c;可以使页面看起来不那么枯燥无味。 一、变形 transform transform 属性应用于元素的2D或3D转换。这个属性允许你将元素旋转&#xff0c;缩放&#xff0c;移动&#xff0c;倾斜…

opencloudos安装nginx新版本

opencloudos基本上完全兼容centos的操作&#xff0c;源管理方式也适用的yum。 ​ 装了一个opencloudos之后&#xff0c;想安装一下nginx。 默认的情况下安装使用&#xff1a; yum install nginx不过默认安装的是 1.14 版本&#xff0c;这个版本有几个 http 的漏洞&#xff…

【JUC进阶】03. Java对象头和内存布局

1、前言 为了后面更好的学习锁优化以及运作过程&#xff0c;需要我们对HotSpot虚拟机的Java对象内存布局有一定的了解&#xff0c;也作为技术储备。 2、对象的内存布局 在HotSpot虚拟机中&#xff0c;对象在堆内存中存储的布局可以划分为三个部分&#xff1a;对象头&#xf…

逍遥子All in阿里云,阿里“压舱石”与“秘密武器”接任

激荡中的阿里&#xff0c;又宣布了组织变革的最新进展&#xff1a;张勇将在2023年9月10日卸任阿里巴巴控股集团董事会主席兼CEO职务&#xff0c;此后将专职担任阿里云智能集团董事长兼CEO。蔡崇信将接任阿里集团董事长&#xff0c;吴泳铭出任阿里集团CEO并继续兼任淘天集团董事…

Linux 学习记录37(C高级篇)

Linux 学习记录37(C高级篇) 本文目录 Linux 学习记录37(C高级篇)一、常见的shell解析器二、变量1. shell脚本外部传参2. 输入输出(1. 输出(2. 输入 3. 命令置换符4. shell中的数组 三、shell中的算数运算1. (())运算2. $[ ]运算3. let运算4. expr指令(1.数据运算(3. 字符运算 四…

STM32单片机(七)ADC模拟数字转换器----第二节:ADC模数转换器练习(AD单通道和AD多通道)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

港科夜闻|香港科大(广州)INNOTECH创科嘉年华暨周年庆典隆重举行

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大(广州)INNOTECH创科嘉年华暨周年庆典隆重举行。6月16日&#xff0c;在《广州南沙深化面向世界的粤港澳全面合作总体方案》印发一周年之际&#xff0c;作为《南沙方案》发布后落成的第一个重大项目&#xff0c;香…

深入理解生成式AI技术原理:初识生成式AI

&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f38d;大家好&#xff0c;我是慕枫 &#x1f38d;前阿里巴巴高级工程师&#xff0c;InfoQ签约作者、阿里云专家博主&#xff0c;一直致力于用大白话讲解技术知识 &#x…

三菱plc编程协议开发记录

目录 1 协议介绍 2 测试报文 3 PLC服务端仿真 4 java测试代码 1 协议介绍 Fx_Serial 通过Fx编程口协议连接三菱FX0N、FX1N、FX2N、FX3U FX3G、FX3S系列PLC。协议的详细介绍文档见附件“FX编程口协议.pdf”。 2 测试报文 组装各种类型报文测试&#xff0c;见附件“报文.xls…

Spring MVC框架步骤

目录 前言1. 配置开发环境2. 创建一个新的Maven项目3. 配置Web.xml文件4. 创建控制器类5. 创建视图6. 配置视图解析器7. 运行应用程序8. 测试应用程序 前言 Spring MVC是一种基于Java的Web应用程序开发框架&#xff0c;它可以帮助开发人员构建灵活、健壮和可扩展的Web应用程序…

【MongoDB】三、使用Java连接MongoDB

【MongoDB】三、使用Java连接MongoDB 实验目的实验内容练习1、开启Eclipse&#xff0c;创建Java Project项目&#xff0c;命名为Mongo12、添加项目依赖的jar包3、创建类MongoDemo4、连接数据库5、查看集合6、创建集合7、删除集合8、查看文档9、插入文档10、更新文档11、删除文档…

hive/spark数据倾斜解决方案

Hive数据倾斜以及解决方案 1、什么是数据倾斜 数据倾斜主要表现在&#xff0c;mapreduce程序执行时&#xff0c;reduce节点大部分执行完毕&#xff0c;但是有一个或者几个reduce节点运行很慢&#xff0c;导致整个程序的处理时间很长&#xff0c;这是因为某一个key的条数比其他…

stm32驱动RFID高频读卡器读取IC卡

stm32驱动RFID读卡器读取IC卡 1.介绍RFID2.RFID控制指令2.1 读IC卡号2.2 读IC卡数据块2.3 写数据到IC卡数据块2.4 读取RFID读卡器用户数据2.5 向RFID读卡器写入用户数据 3.代码实例3.1 rfid.c 源文件3.2 rfid 头文件 4. 结语 1.介绍RFID RFID&#xff08;Radio-Frequency Iden…

篮球比赛管理系统的设计与实现(论文+源码)_kaic

摘要 迅猛发展并日益成熟的网络已经彻底的影响了我们的方方面面。人们也确实真切的体会到了网络带给我们的便捷。本网站的设计理念在于作为一个天津大学生台球联盟推广网&#xff0c;就是能够尽可能详细地展示、介绍台球联盟资讯信息&#xff0c;播放视频&#xff0c;同时为广…

关于Eclipse代码断点调试与相关快捷键

关于Eclipse代码断点调试与相关快捷键 功能快捷键 首先关于DeBug测试的快捷键&#xff1a; Debug F5&#xff1a;Step Into&#xff08;debug&#xff09; F6&#xff1a;Step over&#xff08;debug&#xff09; F7&#xff1a;Step return&#xff08;debug&#xff09; F8&a…

化妆品行业知识分享

目录 一、产品基本信息 1.产品的组成 2. 产品分类 3.常见术语 二、产品特性 1.生产特性 2.销售特性 3.采购特性 4.研发特性 三、行业痛点与解决方案 1.行业主要存在的痛点 2.日常业务解决方案&#xff1a; 3.供应商管理解决方案&#xff1a; 四、总结 一、产品基本信息 1.产品的…

C++基础(13)——STL(stack、queue、list)

前言 本文主要介绍C中STL中的stack、queue和list容器 7.5&#xff1a;stack容器 7.5.1&#xff1a;stack容器基本概念 栈中只有顶端元素才可以被外界调用&#xff0c;因此栈不允许有遍历的行为&#xff0c;其中string、vector、deque都可以遍历 7.5.2&#xff1a;栈的常用接…

AT32F437网络通信

网络时间长了ping不通&#xff0c;解决方法 https :// https://hjha.bar:8443/vod 123456789 /play/id/32052/sid/1/nid/1.html