【C++】运算符重载与赋值运算符重载(显式与默认)的特性与格式以及前置++,后置++重载

news2024/12/28 11:41:59

文章目录

  • 前言
  • 一、运算符重载
  • 二、赋值运算符重载
    • 1. 赋值运算符重载格式:
    • 2. 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。
    • 3. 赋值运算符只能重载成类的成员函数不能重载成全局函数
  • 三、前置++与后置++


前言

`

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

一、运算符重载

函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型 operator操作符(参数列表)

注意:
1…不能通过连接其他符号来创建新的操作符:比如operator@
2.重载操作符必须有一个类类型参数
3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义
作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this
4 . . :: sizeof ?: .* 注意以上5个运算符不能重载。这个经常在笔试选择题中出现。

全局的operator<:
在这里插入图片描述
所以我们一般都不把运算符重载函数写成全局函数,而上把他写在类中作为成员函数
这里我把全部比较情况都写出来了:

在这里插入图片描述
在这里插入图片描述

二、赋值运算符重载

Date&operator=(const Date& x) {
		//赋值重载函数
		if ( this != &x) {
			_year = x. _year;
			_month = x._month;
			_day = x._day;
		}
		return *this;
	}

1. 赋值运算符重载格式:

1.参数类型:const T&,传递引用可以提高传参效率
2.返回值类型:T&,返回引用可以提高返回的效率,有返回值目的是为了支持连续赋值

在这里插入图片描述
在这里插入图片描述
当我们进行连续赋值的时候如果为void类型就会报错,因为d2经过赋值后确实变为d3的值,但d2=d3整体等级与d2.operator(d3)返回值为void赋给d1就会报错

3.检测是否自己给自己赋值 >
在这里插入图片描述

4.返回*this :要复合连续赋值的含义

2. 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。

注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。

默认生成赋值重载和拷贝构造行为一样:
1.内置类型成员-值拷贝/浅拷贝
2.自定义类型成员:会去调用他们的赋值重载
3.当赋值涉及到内存释放之类的时候我们要自己去实现完成深拷贝,不然容易出现错误,其他情况都可以让编译器帮我们写好。
在这里插入图片描述

3. 赋值运算符只能重载成类的成员函数不能重载成全局函数

如果一个类中什么成员都没有,简称为空类。
空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。
默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。

在这里插入图片描述
赋值重载函数也在这六个函数之中,当我们定义赋值重载函数为全局函数的时候,编译器会认为我们类里面没有自己写赋值重载函数,他会帮我们自己生成一个,这就和我们在全局里面自己定义的赋值重载函数矛盾了。

三、前置++与后置++

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/175a2da592364e97967ce0fa93d72bf2.png

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

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

相关文章

【Linux】Linux小程序-进度条

目录 一、\r和\n的理解 二、行缓冲区概念 三、进度条源代码 一、\r和\n的理解 \r&#xff1a;回车&#xff1b; \n&#xff1a;换行&#xff1b; 那么请问这两个有什么区别呢&#xff1f; 比如&#xff1a;我们在编写内容的时候&#xff0c;一行没有写完的情况下&#xff0c;需…

【信息安全案例】——软件解密技术(以OllyDbg为例)

目录 &#x1f552; 1. 软件解密技术&#x1f558; 1.1 概述&#x1f558; 1.2 爆破&#x1f558; 1.3 跟踪注册&#x1f558; 1.4 写出注册 &#x1f552; 2. 破解相关问题&#x1f558; 2.1 破解程度&#x1f558; 2.2 破解线索 &#x1f552; 3. 实验&#xff1a;使用 OllyD…

分布式系统原理

高可用是指系统无中断的执行功能的能力&#xff0c;代表了系统的可用程度&#xff0c;是进行系统设计时必须要遵守的准则之一。 而高可用的实现方案&#xff0c;无外乎就是冗余&#xff0c;就存储的高可用而言&#xff0c;问题不在于如何进行数据备份&#xff0c;而在于如何规避…

MacOS Ventura 13.4 (22F66) 带 OC 引导双分区黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 13.4 更新&#xff08;内部版本号&#xff1a;22F66&#xff09;&#xff0c;本次更新距离上次发布隔了 41 天&#xff0c;主要解决了与Apple Watch自动解锁、蓝牙键盘、屏幕使用时间和VoiceOver相关的问题&#xff0c;推荐大家安装升级。…

Vue 级联组件添加按钮并添加点击事件加传参

我这里采用的是jqvue实现的此功能&#xff0c;首先是要把按钮追加进去&#xff0c;当然头开始写真实dom会导致页面上也追加显示&#xff0c;但是我想实现的是在级联组件上追加所以&#xff0c;选择创建虚拟dom&#xff0c;然后传参这点实在是研究试错了半天&#xff0c;最后选择…

聚观早报|ChatGPT 推出官方 iOS App;大疆称将接收OPPO哲库工程师

今日要闻&#xff1a;ChatGPT 推出官方 iOS App&#xff1b;大疆称将接收OPPO哲库工程师&#xff1b;菜鸟、盒马启动上市计划&#xff1b;苹果公司限制员工使用ChatGPT&#xff1b;张勇&#xff1a;阿里云将分拆上市 ChatGPT 推出官方 iOS App 北京时间 5 月 19 日&#xff0c…

苹果扩充AirTag应用场景,苹果Find My应用更加广泛

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果近日获得了一项技术专利&#xff0c;将追踪器附着人体或者服装上&#xff0c;从而监测健康和活动数据。 AirTag 不仅可以追踪某件事物之外&#xff0c;还可以通过安装在人体的不同位置&#xff0c…

人工智能本来是个很简单的事,咋被人们整的这么神秘?

&#xff08;1&#xff09; 很多人以为大模型的参数量大是因为数据多。 其实大模型的参数量和超参数的配置相关。主要的超参数有下面几个&#xff1a; 词表大小&#xff1a;Vocab_Size最大位置编码大小&#xff1a;Max_Position_embeddings隐层节点数大小&#xff1a;Hidden_Si…

Linux - 第16节 - 网络基础(应用层二)

1.HTTP协议 我们在套接字部分编写的代码和应用层一中编写的网络计算器代码都是在应用层工作的&#xff0c;是应用层代码&#xff0c;因此应用层代码包括&#xff1a; &#xff08;1&#xff09;基本系统socket套接字系列接口的使用。 &#xff08;2&#xff09;定制协议&#x…

一个炎爆术分享给大家~

先来强势围观&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"https://cdnjs.cloudflare.com/ajax/libs/three.js/r120/…

23种设计模式之外观模式(Facade Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的外观模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

云从科技从容大模型:大模型和AI平台什么关系?为什么造行业大模型?

原创&#xff1a;亲爱的数据 2023年5月18日&#xff0c;坐标广州南沙&#xff0c;来自云从科技的“云从从容大模型”正式亮相。 自此&#xff0c;云从科技从CV四小龙“进阶”成为一家AI大模型公司&#xff0c;同时&#xff0c;别忘记云从还有一个身份常被人提起&#xff1a;首家…

纯虚函数与抽象类

纯虚函数与抽象类 虚析构函数状态转换的引入C中的状态转换C中的状态转换职责链模式 纯虚函数和虚基类使用规则实例接口继承和实现继承 虚析构函数 在上一次博客中写到了这么一段代码&#xff1a; class object { private: int value;public:object(int x 0) : value(x) {}~o…

嵌入式音视频开发过程中如何控制码率?

一、码率控制的意义&#xff1a; 在音视频领域&#xff0c;码率控制模式有着举足轻重的地位。那什么是码率控制&#xff1f;码率控制是指通过调节图像的压缩比例&#xff0c;从而决定输出编码码率的过程。 二、H264有多少种码率控制模式&#xff1a; H264码率控制模式分别有&am…

DailyMart01:一点小想法,一个新的开始!

大家好呀&#xff0c;我是飘渺&#xff01; 截至目前&#xff0c;我已在公众号和知识星球上发布了多个系列文章&#xff0c;涵盖了SpringBoot老鸟系列、SpringCloud微服务系列、运维监控系列、分库分表系列和Kubernetes云原生系列。尽管每个系列的重点各有不同&#xff0c;它们…

【MYSQL】事务的4大属性,对隔离级别的详细讲解

目录 1.原子性和持久性 1.1.手动提交事务 1.2.自动提交事务 1.3.事务的原理&#xff1a; 2.隔离性 1.读未提交&#xff08;Read Uncommitted&#xff09; 2.读提交&#xff08;Read Committed&#xff09; 3.可重复读 4.串行化 3.一致性 4.理解读提交和可重复读的实现…

iptables

目录 iptables概述 netfilter/iptables 关系&#xff1a; 四表五链 四表&#xff1a; 五链&#xff1a; 数据包到达防火墙时&#xff0c;规则表之间的优先顺序&#xff1a; 规则链之间的匹配顺序&#xff1a; 主机型防火墙&#xff1a; 网络型防火墙&#xff1a; ipta…

Uart,RS232,RS485串口通讯协议学习

目录 定义 UART&#xff08;通常被称为串口,简单意味着使用广泛&#xff0c;具有普适性) RS232 RS232电平转换 RS485 -Recommended Standard (再推荐标准) 485和232的对比 RS485组网 总结 定义 串口是我们都很熟悉的&#xff0c;尤其是需要串口调试的时候,打印信息插…

C语言函数大全-- _w 开头的函数(4)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _wstrtime 1.1 函数说明 函数声明函数功能wchar_t *_wstrtime(wchar_t *buffer);用于获取当前系统时间并返回一个宽字符字符串表示&#xff0c;格式为 "HH:MM:SS"&#xff08;小时:分钟:秒&#xff09; …

2023 Vue开发者的React入门

Vue 和 React 都是流行的 JavaScript 框架&#xff0c;它们在组件化、数据绑定等方面有很多相似之处 本文默认已有现代前端开发(Vue)背景&#xff0c;关于 组件化、前端路由、状态管理 概念不会过多介绍 0基础建议详细阅读 Thinking in React-官方文档 了解 React 的设计哲学 R…