运算符重载: 递增和递减运算符
2024年1月2日 2024年1月2日
建议定义为类的成员函数: 改变所操作的对象
建议同时定义前置版本和后置版本
前置版本和后置版本
-
普通的重载形式无法区分这两种情况
后置版本接受一个额外的(不被使用)int类型形参, 编译器传入0
因为不会用到, 可以不给出形参名字
-
前置版本返回左值, 后置版本返回右值
-
后置版本的实现会使用前置版本
递增运算符
- 前置版本
1StrBlobPtr &operator++() 2{ 3 check(curr, "increment past end of StrBlobPtr"); 4 ++curr; 5 return *this; 6}
- 后置版本
1StrBlobPtr operator++(int) 2{ 3 StrBlobPtr ret = *this; 4 ++*this; 5 return ret; 6}
递减运算符
- 前置版本
1StrBlobPtr &operator--() 2{ 3 --curr; 4 check(curr, "decrement past begin of StrBlobPtr"); 5 return *this; 6}
- 后置版本
1StrBlobPtr operator--(int) 2{ 3 StrBlobPtr ret = *this; 4 --*this; 5 return ret; 6}
显式调用
1var.operator++(0); // 后置版本 2var.operator++(); // 前置版本