Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )

【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )

作者头像
韩曙亮
发布于 2023-10-15 09:27:36
发布于 2023-10-15 09:27:36
20300
代码可运行
举报
运行总次数:0
代码可运行
上 篇博客

讲解了 前置运算符 的 重载 , 前置运算符就是 ++Object--Object , 一元运算符 在 对象的 前面 ;

本篇博客开始讲解 后置运算符 的重载 ;

一、后置运算符重载

1、前置运算符重载 与 后置运算符重载 的区别

后置运算符 是 Object++Object-- , 一元运算符在对象的后面 ;

前置运算符重载 与 后置运算符重载 的区别是 返回值类型 不同 ,

  • 前置运算符重载 , 返回值是 对象引用 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 全局函数 实现 前置 ++ 自增运算符重载
// 重载 前置 ++ 运算符
// 实现 1 个 Student 对象 自增运算
// 由于 参数中的 Student& s 中的属性发生了变化 
// 返回时仍需要返回 Student& s 参数本身
Student& operator++(Student& s)
{
	s.age++;
	s.height++;
	return s;
};
  • 后置运算符重载 , 返回值是 匿名对象 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 全局函数 实现 后置 ++ 自增运算符重载
// 重载 后置 ++ 运算符
// 实现 1 个 Student 对象 自增运算
// 先使用 参数中的 Student& s 对象 , 再自增
// 因此 Student& s 对象是需要自增的 
// 但是使用的对象 就是 返回的对象, 必须是没有自增的对象
// 这里使用 ret 保存 s 对象值 , 然后返回该 ret 值 
// s 对象中的值自增
// 返回的是一个新 Student 对象
Student operator++(Student& s)
{
	Student ret = s;
	s.age++;
	s.height++;
	return ret;
};

由于 重载函数 只看 函数名 和 参数列表 , 不看返回值 , 因此

  • Student operator++(Student& s)
  • Student& operator++(Student& s)

这2个函数被看做相同的函数 ,

上述重载函数定义 , 在编译时报错 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
error C2556: “Student operator ++(Student &): 重载函数与“Student &operator ++(Student &)”只是在返回类型上不同

2、后置运算符重载添加 int 占位参数

因此 , 后置运算符重载 , 通常需要一个 占位参数 int ;

这个参数没有实际的意义 , 只是为了和 前置运算符重载 进行区别 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 全局函数 实现 后置 ++ 自增运算符重载
// 重载 后置 ++ 运算符
// 实现 1 个 Student 对象 自增运算
// 先使用 参数中的 Student& s 对象 , 再自增
// 因此 Student& s 对象是需要自增的 
// 但是使用的对象 就是 返回的对象, 必须是没有自增的对象
// 这里使用 ret 保存 s 对象值 , 然后返回该 ret 值 
// s 对象中的值自增
// 返回的是一个新 Student 对象
Student operator++(Student& s, int)
{
	Student ret = s;
	s.age++;
	s.height++;
	return ret;
};

占位参数 参考 【C++】函数参数扩展 ② ( 占位参数 | 占位参数规则 - 必须为占位参数传入实参 | 默认参数与占位参数结合使用 ) 博客 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++/学习】运算符重载&&const成员&&取地址
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键字operator 后面接需要重载的运算符符号。 函数原型:返回值类型 operator操作符(参数列表)
IsLand1314
2024/10/15
1160
【C++/学习】运算符重载&&const成员&&取地址
【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )
韩曙亮
2023/10/15
2420
【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )
【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )
韩曙亮
2023/10/15
2230
【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )
【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )
为了使全局函数中能访问 Student 类的私有成员 , 需要将该全局函数声明为 友元函数 ;
韩曙亮
2023/10/15
2470
【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )
【C++指南】运算符重载详解
运算符重载是指为类(或结构体)的特定运算符提供自定义实现,使其能够作用于类的对象。重载的运算符可以保持其原有的语义,也可以定义新的语义。
倔强的石头
2024/12/06
3090
C++运算符重载(三)之递增运算符重载
先++,后输出是指先运行成员函数前置递增运算符重载,再运行函数左移运算符重载。所以先++完成后再传入左移运算符重载函数中,要么是引用传递,要么是拷贝传递,上图使用的是拷贝传递,都可。
CtrlX
2022/09/21
7430
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
Srlua
2024/05/26
1220
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
【C++】类和对象之赋值运算符重载
在前面的博客中提到了拷贝构造: 【C++】类和对象之拷贝构造函数篇,和 运算符重载【C++】类和对象之常引用与运算符重载,接下来继续来看赋值运算符重载中的赋值运算符重载。
zxctscl
2024/02/29
1570
【C++】类和对象之赋值运算符重载
【C++修行之道】类和对象(四)运算符重载
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键字operator后面接需要重载的运算符符号。 函数原型:返回值类型 operator操作符(参数列表)。
走在努力路上的自己
2024/06/05
1170
【C++修行之道】类和对象(四)运算符重载
C++ 自增、自减运算符的重载和性能分析
a 先自增 +1 后, a 的值就为 1 ,然后再参与 a=5 的运算,所以最后 a的值是 5。
小林coding
2020/04/01
1.1K0
C++ 自增、自减运算符的重载和性能分析
[C++] 类和对象:运算符重载
在C++中,运算符重载是一种强大的特性,它允许我们重新定义已有的运算符,以便用于用户自定义的数据类型。通过运算符重载,我们可以使得我们自定义的类对象像内置类型一样进行运算,这为编写清晰、简洁且易于理解的代码提供了便利。
DevKevin
2024/05/12
1550
[C++] 类和对象:运算符重载
【c++】类和对象(五)赋值运算符重载
但是这里是全局的定义的operator==,这里会发现运算符重载成全局的就需要成员变量是公有的,即我的成员不能是private私有的,那么封装性如何保证?
用户11029103
2024/04/02
2290
【c++】类和对象(五)赋值运算符重载
C++运算符重载详解(日期类实操)
在C语言中,对于内置类型,我们可以根据符号>、<、==等去直接比较大小,但是对于自定义来说,肯定不能直接比较大小,例如下面的日期类,想要比较两个两个日期的大小,或者相差多少天,直接写运算符肯定是不行的。
用户11316056
2024/10/16
1010
C++运算符重载详解(日期类实操)
【C++】类与对象(运算符重载、const成员、取地址重载)
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
秦jh
2024/02/27
1810
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】揭秘类与对象的内在机制(核心卷之运算符重载、赋值重载与取址重载的奥秘)
TANGLONG
2025/01/23
860
【C++】揭秘类与对象的内在机制(核心卷之运算符重载、赋值重载与取址重载的奥秘)
C++从入门到精通——类的6个默认成员函数之赋值运算符重载
空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。
鲜于言悠
2024/04/17
1660
C++从入门到精通——类的6个默认成员函数之赋值运算符重载
C++面向对象学习之运算符重载(1)
运算符重载(函数重载)是C++多态的重要实现手段之一。通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能。
glm233
2020/09/28
8770
【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )
逻辑与 && 和 逻辑或 || 运算符 是 可以重载的 , 这两个操作符是 特殊操作符 ;
韩曙亮
2023/10/15
2150
【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )
【C++】拷贝构造函数和赋值运算符重载详解
拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存 在的类类型对象创建新对象时由编译器自动调用。 拷贝构造函数是一个特殊的构造函数,用于创建一个新的对象,其内容与另一个已存在的对象相同。在C++中,拷贝构造函数通常用于将一个对象的值复制到另一个对象中(一个对象存在,一个对象不存在),以便在程序中进行对象的赋值和传递操作时,能够确保对象的内容被正确复制。
P_M_P
2024/02/05
2760
【C++】拷贝构造函数和赋值运算符重载详解
c++运算符重载
关键字operator 运算符重载本质是函数的调用 1. 重载操作符必须具有一个类类型或枚举类型操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。 如:int operator+(int, int), 不可以    2. 为类设计重载操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数。在某些情况下,程序没有选择,操作符必须是成员;在另外一些情况下,有些经验可以指导我们做出决定。下面是一些指导: a. 赋值(=),下标([]),调用(())和成员访问箭头(->)等操作符必
拾点阳光
2018/05/10
8460
推荐阅读
【C++/学习】运算符重载&&const成员&&取地址
1160
【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )
2420
【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )
2230
【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )
2470
【C++指南】运算符重载详解
3090
C++运算符重载(三)之递增运算符重载
7430
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
1220
【C++】类和对象之赋值运算符重载
1570
【C++修行之道】类和对象(四)运算符重载
1170
C++ 自增、自减运算符的重载和性能分析
1.1K0
[C++] 类和对象:运算符重载
1550
【c++】类和对象(五)赋值运算符重载
2290
C++运算符重载详解(日期类实操)
1010
【C++】类与对象(运算符重载、const成员、取地址重载)
1810
【C++】揭秘类与对象的内在机制(核心卷之运算符重载、赋值重载与取址重载的奥秘)
860
C++从入门到精通——类的6个默认成员函数之赋值运算符重载
1660
C++面向对象学习之运算符重载(1)
8770
【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )
2150
【C++】拷贝构造函数和赋值运算符重载详解
2760
c++运算符重载
8460
相关推荐
【C++/学习】运算符重载&&const成员&&取地址
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验