当前位置: 首页 > news >正文

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

文章目录

  • 一、后置运算符重载
    • 1、前置运算符重载 与 后置运算符重载 的区别
    • 2、后置运算符重载添加 int 占位参数

2 2 2 篇博客

  • 【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )
  • 【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

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

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





一、后置运算符重载




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


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

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

  • 前置运算符重载 , 返回值是 对象引用 ;
// 使用 全局函数 实现 前置 ++ 自增运算符重载
// 重载 前置 ++ 运算符
// 实现 1 个 Student 对象 自增运算
// 由于 参数中的 Student& s 中的属性发生了变化 
// 返回时仍需要返回 Student& s 参数本身
Student& operator++(Student& s)
{s.age++;s.height++;return s;
};
  • 后置运算符重载 , 返回值是 匿名对象 ;
// 使用 全局函数 实现 后置 ++ 自增运算符重载
// 重载 后置 ++ 运算符
// 实现 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 2 2 个函数被看做相同的函数 ,

在这里插入图片描述
上述重载函数定义 , 在编译时报错 ,

error C2556: “Student operator ++(Student &): 重载函数与“Student &operator ++(Student &)”只是在返回类型上不同

在这里插入图片描述


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


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

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

// 使用 全局函数 实现 后置 ++ 自增运算符重载
// 重载 后置 ++ 运算符
// 实现 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++】函数参数扩展 ② ( 占位参数 | 占位参数规则 - 必须为占位参数传入实参 | 默认参数与占位参数结合使用 ) 博客 ;

http://www.lryc.cn/news/182947.html

相关文章:

  • 538. 把二叉搜索树转换为累加树
  • java8日期时间工具类
  • 算法-动态规划/trie树-单词拆分
  • React框架核心原理
  • python-pytorch 利用pytorch对堆叠自编码器进行训练和验证
  • 制作 3 档可调灯程序编写
  • 源码分享-M3U8数据流ts的AES-128解密并合并---GoLang实现
  • CSDN Q: “这段代码算是在STC89C52RC51单片机上完成PWM呼吸灯了吗?“
  • Linux系统编程系列之线程池
  • Linux CentOS7 vim多文件与多窗口操作
  • SPI 通信协议
  • 【图像处理】使用各向异性滤波器和分割图像处理从MRI图像检测脑肿瘤(Matlab代码实现)
  • 5个适合初学者的初级网络安全工作,网络安全就业必看
  • Kafka核心原理
  • 探秘前后端开发世界:猫头虎带你穿梭编程的繁忙街区,解锁全栈之路
  • 洛谷_分支循环
  • MySQL数据库入门到精通——进阶篇(3)
  • Mind Map:大语言模型中的知识图谱提示激发思维图10.1+10.2
  • [引擎开发] 杂谈ue4中的Vulkan
  • docker--redis容器部署及地理空间API的使用示例-II
  • Vue中如何进行文件浏览与文件管理
  • jenkins利用插件Active Choices Plug-in达到联动显示或隐藏参数,且参数值可修改
  • 香蕉叶病害数据集
  • 天地无用 - 修改朋友圈的定位: 高德地图 + 爱思助手
  • AtCoder Beginner Contest 232(A-G)
  • 计算机网络(第8版)-第5章 运输层
  • AtCoder Beginner Contest 231(D-F,H)
  • 【Python】map
  • Swift 5.9 与 SwiftUI 5.0 中新 Observation 框架应用之深入浅出
  • 【已解决】在 Vite 项目中使用 eslint-config-ali 时遇到的解析错误