文章目录
- 一、后置运算符重载
- 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++】函数参数扩展 ② ( 占位参数 | 占位参数规则 - 必须为占位参数传入实参 | 默认参数与占位参数结合使用 ) 博客 ;