【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )
  K1I6GvxBEuyy 2023年11月02日 81 0



文章目录

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

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

  • 【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)

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

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


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

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

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



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++】函数参数扩展 ② ( 占位参数 | 占位参数规则 - 必须为占位参数传入实参 | 默认参数与占位参数结合使用 ) 博客 ;



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
K1I6GvxBEuyy
作者其他文章 更多