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

前言

本文主要介绍了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)

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

防火墙日志记录和监控在网络安全中的重要性

防火墙监视进出网络的流量&#xff0c;并保护部署网络的网络免受恶意流量的侵害。它是一个网络安全系统&#xff0c;根据一些预定义的规则监控传入和传出的流量。它以日志的形式记录有关如何管理流量的信息。日志数据包含流量的源和目标 IP 地址、端口号、协议等。为了有效地保…

Git系列:运用Git创建空白分支进行项目相关文档管理

文章目录 起因一、为什么会选择Git分支二、Git分支的简单介绍和好处三、本次的具体操作1.$git checkout --orphan XXX2.删除当前分支里的内容3.提交新的分支 总结 起因 项目管理过程中没有做好相关文档管理&#xff0c;比如需求&#xff0c;开发&#xff0c;测试等文档&#x…

科技云报道:大模型时代,AI基础软件机会何在?

科技云报道原创。 大模型时代&#xff0c;离不开算力&#xff0c;算法、数据的喂养。如果将视角放至整个产业链上&#xff0c;算法背后&#xff0c;还有一个关键要素值得被关注&#xff0c;那就是AI基础软件。 算法是实现AI功能的关键&#xff0c;而基础软件则为算法提供运行…

React项目引入Arco Design,以及Arco Design Pro 架构

创建项目 创建 react-arco 项目 pnpm create vite my-vue-app --template react安装 arco-design/web-react 安装 react 版的 arco-design 基础使用 添加一个按钮&#xff0c;App.tsx import "./App.css"; import { Button } from "arco-design/web-react…

CH2023、Adobe Character Animator 2023(动画角色制作软件)下载教程、安装教程

最后附下载地址 Adobe CH简介&#xff1a; Adobe Character Animator是一款基于动画制作的软件&#xff0c;它可以将手绘的角色通过摄像头或麦克风捕捉到的实时动作转化为动画效果。该软件结合了人工智能和动画技术&#xff0c;可以快速创建高质量的角色动画&#xff0c;并且…

2023年的深度学习入门指南(17) - 深度学习的硬件加速技术

2023年的深度学习入门指南(17) - 深度学习的硬件加速技术 有了前面的知识之后&#xff0c;想必大家对于算力需求的理解已经越来越深刻了。 除了使用CPU&#xff0c;GPU这样的通用器件之外&#xff0c;采用专用的硬件来进行加速是一个大家都能想到的选择。 其中的代表器件就是…

杂记 | 使用Docker和Nginx为网站添加HTTPS访问功能

文章目录 01 准备工作1.1 HTTPS介绍1.2 准备工作 02 编写nginx.conf03 使用docker启动nginx 01 准备工作 1.1 HTTPS介绍 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种通过加密通信保护网站数据传输的协议。它是 HTTP 协议的安全版本&#xff0c;通…

1.4 掌握Scala运算符

一、运算符等价于方法 &#xff08;一&#xff09;运算符即方法 op运算符与.op方法调用是等价的&#xff0c;op表示运算符&#xff1a;、-、*、/…… 演示x y与x.(y)的等价 &#xff08;二&#xff09;方法即运算符 1、单参方法 str.indexOf(‘a’) 与 str indexOf ‘a’…

stable-diffusion-webui的介绍与使用——Controlnet1.1

源码地址&#xff1a;https://github.com/lllyasviel/ControlNet | 最新版本 controlnet-v1.1 论文地址&#xff1a;2302.Adding Conditional Control to Text-to-Image Diffusion Models 扩展UI地址&#xff08;需先安装sd-webui&#xff09;&#xff1a;https://github.com/M…

【gcc, cmake, eigen, opencv,ubuntu】四.opencv安装和使用,获取opencv matiax 的指针

文章目录 ubuntu系统安装opencv1.下载opencv和opencv_contrib2.安装指导3.Linux 下 fatal error: opencv2/opencv.hpp: 没有那个文件或目录4.g 和cmake 编译使用opencv的程序5.opencv,eigen速度比较6.opencv常用类型符号7.获取opencv matiax 的指针 ubuntu系统安装opencv 1.下…

设计模式大全

使用设计模式的目的&#xff1a; 程序猿在编码的过程中面临着来自耦合性、内聚性、可维护性、可扩展性、重用性、灵活性等多方面的挑战。设计模式是为了让程序具有更好的&#xff1a; 1&#xff09;重用性&#xff0c;即相同功能的代码编写一次即可&#xff0c;不用重复编写 …

史上最全Hadoop面试题:尼恩大数据面试宝典专题1

说在前面&#xff1a; 《尼恩 大数据 面试宝典》 是 《尼恩Java面试宝典》 姊妹篇。 这里特别说明一下&#xff1a;《尼恩Java面试宝典》41个专题 PDF &#xff08;请在文末获取&#xff09;自发布以来&#xff0c; 已经收集了 好几千题&#xff0c; 足足4000多页&#xff0c…

haproxy

haproxy haproxy一&#xff1a;常见的Web集群调度器1.软件2.硬件3.LVS &#xff0c;Nginx &#xff0c;Haproxy 的区别&#xff1a; 二&#xff1a;Haproxy应用分析1.HAProxy的主要特性有&#xff1a;2.HAProxy负载均衡策略非常多&#xff0c;常见的有如下8种&#xff1a; 三&a…

【深度学习】YOLOv8训练过程,YOLOv8实战教程,目标检测任务SOTA,关键点回归

文章目录 可用资源资源安装模型训练&#xff08;检测&#xff09;模型pridict模型导出 可用资源 https://github.com/ultralytics/ultralytics 官方教程&#xff1a;https://docs.ultralytics.com/modes/train/ 资源安装 更建议下载代码后使用 下面指令安装&#xff0c;这样…

C高级 day37

1、编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 1、包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOME的值…

uniapp实现应用wgt资源热更新

APP更新一般有两种形式 1、整包更新&#xff0c;通过hbuliderx提供的在线云打包就属于整包更新&#xff0c;属于全量更新&#xff0c;缺点就是打包时间长、要重新走市场审核。费时 2、wgt资源包热更新&#xff0c;通过hbuliderx打wgt包 &#xff0c;速度快&#xff0c;能在应用…

28.vite

目录 1 一些概念 1.1 单页面应用程序SPA 1.2 vite 2 初始化vite项目 3 项目中的文件 1 一些概念 1.1 单页面应用程序SPA 单页面应用程序是只有一个页面的前端&#xff0c;切换页面通过前端路由来切换 特点如下 实现了前后端分离&#xff0c;后端仅出接口&#…

域名解析详解

域名解析 记录类型&#xff1a; 提示&#xff1a; 将域名指向云服务器&#xff0c;选择 A&#xff1b; 将域名指向另一个域名&#xff0c;选择 CNAME&#xff1b; 建立邮箱选择 MX&#xff0c;根据邮箱服务商提供的 MX 记录填写。 记录类型解释A用来指定域名的 IPv4 地址&…

优思学院|六西格玛倡导者与项目赞助人是什么角色?有何区别?

倡导者&#xff08;Champion&#xff09;和项目赞助人&#xff08;Sponsor&#xff09;在正式的六西格玛的组织架构中是两个不同的角色&#xff0c;所以希望在这篇文章中解释一下两个角色的区别。 倡导者&#xff08;Champion&#xff09;是负责组织竞争力和增长的董事和高管&…

C#提升(一、泛型)

一、什么是泛型 泛型&#xff0c;即“参数化类型” 我们来看以下代码&#xff0c;目的很明确&#xff0c;就是显示参数类型&#xff0c;这种类似的代码或者说只有参数类型不同&#xff0c;但是功能相同时&#xff0c;我们如何让代码写的更优雅&#xff1f; 在泛型没有出现的…