C++基础(6)——类和对象(4)

news2024/10/5 13:09:49

前言

本文主要介绍了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/666445.html

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

相关文章

管理类联考——写作——素材篇——论说文——写作素材03——志篇:逆境·考验04——志篇:初心

管理类专业学位联考 (写作能力) 论说文素材 03——志篇&#xff1a;逆境考验 论文说材料: 逆境是天才的进身之阶&#xff1b;信徒的洗礼之水&#xff1b;能人的无价之宝&#xff1b; 弱者的无底之渊。 ——巴尔扎克 一&#xff1a;道理论据 不是一番寒彻骨&#xff0c;怎得…

【Azure】微软 Azure 基础解析(九)Azure 标识、身份管理、Azure AD 的功能与用途

本系列博文还在更新中&#xff0c;收录在专栏&#xff1a;「Azure探秘&#xff1a;构建云计算世界」 专栏中。 本系列文章列表如下&#xff1a; 【Azure】微软 Azure 基础解析&#xff08;三&#xff09;云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx 【A…

测量设备频宽范围选择要素—系统响应速度

系统响应速度是输入信号经过电压/电流驱动系统输出响应的幅值升到终值过程的斜率&#xff0c;而上升时间是系统响应速度的一种度量&#xff0c;上升时间越短&#xff0c;响应速度越快。 由一阶系统响应定义中&#xff0c;稳定的一阶系统上升时间 定义是响应从终值10%上升到终值…

git常用命令合集(建议收藏)

1、git init将本文件夹初始化成一个本地git仓库 2、git clone&#xff07;xxx&#xff07;将github上的远程克隆到本地 3、git add [file1] [file2] 添加文件到暂存区&#xff0c;包括修改的文件、新增的文件 4、git add [dir] 添加目录到暂存区&#xff0c;包括子目录 5、…

java 类之间相互引用实例探索

本文记录一下自己对类之间相互引用的探索&#xff0c;如有错误&#xff0c;希望不吝赐教 问题一&#xff1a;类之间相互引用依赖会不会引用死循环 不会&#xff0c;例如&#xff1a;A类中声明一个B类的引用&#xff0c;B类中也声明一个A类的引用&#xff0c;因为类之间的引用相…

TCP为什么要三次握手与四次分手?

概要 TCP协议是五层协议中运输层的协议&#xff0c;下面依赖网络层、链路层、物理层&#xff0c;对于一个报文想发到另一台机器(假设是服务器)上对等层&#xff0c;每一个所依赖的层都会对报文进行包装&#xff0c;例如TCP协议就依赖网络层的IP协议&#xff0c;所以发送的报文会…

【数据库数据恢复】SQL Server数据表结构损坏的数据恢复案例

数据库故障&分析&#xff1a; SQL server数据库数据无法读取。 经过初检&#xff0c;发现SQL server数据库文件无法被读取的原因是因为底层File Record被截断为0&#xff0c;无法找到文件开头&#xff0c;数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉…

大专毕业,干了 3 年外包,废了····

如果不是女朋友和我提分手&#xff0c;我估计到现在还是外包公司呆着 大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近3年的点点点&#xff08;功能测试&#xff09;&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在…

VSCode借助Remote-SSH扩展,远程调试linux系统的机器人

本文主要介绍使用VSCode借助Remote-SSH扩展&#xff0c;远程调试linux系统的机器人的方法 在我之前的文章&#xff1a; ROS主机搭建NFS服务器&#xff0c;虚拟机通过挂载访问及修改主机文件 中介绍了采用挂载到的方式进行远程调试的方法&#xff0c;本文将介绍另一种方法&#…

汽车三高试验离不开的远程试验管理平台——TFM

一 背景 众所周知&#xff0c;车辆在量产之前都要经过长时间的耐久性试验和多种汽车适应性或法规试验。道路试验就是在汽车上装设测试仪表和施加模拟载荷&#xff0c;并按实际使用条件来进行测试。此外&#xff0c;在实际试验场地和试验时间上也是有一定规定的。企业根据不同的…

导出符号表和字符设备驱动

目录 1. 导出符号表 1.1. 应用场景&#xff1a;驱动B想要使用驱动A的函数 1.2. 函数解析 1.3. 撰写提供者.c文件 1.4. 撰写提供者makefile文件 1.5. 执行makefile文件生成Module.symvers 1.6. 撰写调用者.c文件 1.7. 撰写调用者的makefile 1.8. 调用验证 2. 字符设备…

springCloud对接kafka+websockt消息中心

1.网关没有配置message和websockt的路由 2.message启动报错&#xff0c;线上zookeeper启动失败导致 3.message配置文件参数读取不到&#xff0c;原因&#xff1a;message_dev.yml 正确名称 message-dev.yml 4.线上websockt地址连接失败&#xff0c;原因&#xff1a;白名单没…

Cisco MPLS VPN Option C2

无RR 一、拓扑 环境:AR1-AR8各有loopback0接口分别是1.1.1.1 2.2.2.2 二、配置步骤 1、配置AS100和AS200的底层网络&#xff0c;这里使用OSPF配置 2、配置AS内使用LDP协议分发标签 3、ASBR之间建立EBGP邻居关系&#xff0c;相对端通告路由时携带标签&#xff0c;互联…

确保消息不会丢失

现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制&#xff0c;完全可以做到在消息传递过程中&#xff0c;即使发生网络中断或者硬件故障&#xff0c;也能确保消息的可靠传递&#xff0c;不丢消息。 绝大部分丢消息的原因都是由于开发者不熟悉消息队列&#xff0c;没…

第一章:软件工程师必备的硬件基础

目录 1、软件工程师需要具备的知识 2、计算机的组成 3、操作系统 4、BIOS的相关知识 1、软件工程师需要具备的知识 问题一&#xff1a;运维工程师、实施工程师是啥&#xff1f; 运维工程师负责服务的稳定性&#xff0c;确保服务可以不间断地为用户提供服务。 实施工程师负…

CmakeList使用笔记

cmake是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。 Cmake的所有语句都写在一个CMakeLists.txt的文件中&#xff0c;Cmake运行之后就会产生我们想要的makefile文件&#xff0c;然…

【Jquery】Jquery实现页面嵌套到客户项目框架里面,不需要登录,获取cookie并直接展示首页:

文章目录 一、效果图:二、实现思路:三、实现代码: 一、效果图: 二、实现思路: 需求&#xff1a;嵌套到别的客户项目框架里面&#xff0c;不需要登录直接展示首页 实现&#xff1a;在打开页面前&#xff0c;获取登录cookie&#xff0c;然后再打开页面 三、实现代码: <!DOCTYP…

63、基于51单片机数字频率计NE555数码管显示系统设计(程序+原理图+Proteus仿真+参考论文+开题报告+任务书+元器件清单等)

摘 要 近年来随着计算机在社会领域的渗透和大规模集成电路的发展&#xff0c;单片机的应用正在不断地走向深入&#xff0c;由于它具有功能强&#xff0c;体积小&#xff0c;功耗低&#xff0c;价格便宜&#xff0c;工作可靠&#xff0c;使用方便等特点&#xff0c;因此越来越…

世界名酒商城元宇宙 中国4大“惨败酒

大家平时买白酒都怎么选择呢&#xff1f;一般都选择平时广告做得多&#xff0c;耳熟能详的大品牌&#xff0c;或者是直接听导购的买酒&#xff0c;毕竟那么贵的价格酒不可能不好&#xff0c;实际上这种买酒方式虽然不能说错吧&#xff0c;但是极容易错过很多好酒。 白酒市场上就…

自动化测试,UI测试和接口测试的基本概念以及指令

今天跟大家介绍UI测试、接口测试、单元测试主要内容 UI测试【Selenium】 UI测试是最接近软件真实用户使用行为的测试类型。通常是模拟真实用户使用软件的行为&#xff0c;即模拟用户在软件界面上的各种操作&#xff0c;并验证这些操作对应的结果是否正确。 这是最基本的一些S…