C++重载自增/减操作符
2024-08-24 13:59:25
作为类成员使用。
前缀是先加/减1,再取值;后缀是先取值,再加/减1。
前缀是左值,返回引用;后缀是右值,返回值。
后缀多一个int参数进行区分,用时编译器会传个没用的0作实参。
在后缀实现中调用前缀版本。
可以显式调用:前缀 xxx.operator++(); 后缀 xxx.operator++(0)
#include <iostream>
#include <stdexcept> class CheckedPtr {
public:
// no default ctor
CheckedPtr(int* b, int *e) : beg(b), end(e), cur(b) {}
// prefix operators
CheckedPtr& operator++();
CheckedPtr& operator--();
// postfix operators
CheckedPtr operator++(int);
CheckedPtr operator--(int);
private:
int* beg;
int* end;
int* cur;
}; CheckedPtr& CheckedPtr::operator++()
{
if (cur == end) {
throw std::out_of_range("increment past the end of CheckedPtr");
}
++cur;
return *this;
} CheckedPtr& CheckedPtr::operator--()
{
if (cur == beg) {
throw std::out_of_range("decrement past the beginning of CheckedPtr");
}
--cur;
return *this;
} CheckedPtr CheckedPtr::operator++(int)
{
CheckedPtr ret(*this);
++*this;
return ret;
} CheckedPtr CheckedPtr::operator--(int)
{
CheckedPtr ret(*this);
--*this;
return ret;
} int main()
{
int ia[];
CheckedPtr parr(ia, ia+);
try {
parr++;
++parr;
parr.operator++();
parr.operator++();
}
catch (const std::out_of_range& e) {
std::cerr << e.what() << std::endl;
}
return ;
}
最新文章
- gridview安卓实现单行多列横向滚动
- IOS开发基础知识--碎片29
- 关于学习angularJS 的一些心得
- 在Centos6下面安装Python3.4
- Jquery 点击按钮将其背景图换成另一张,再次点击恢复默认图片
- postman本地或远程访问不了
- Apache下Worker模式MPM参数分析
- COJ 0020 30201象棋中的皇后
- 在 sublime text 上添加 Package Control
- word中正文分栏重新换页问题
- Qt5+MSVC2015环境将VS2015编写的控制台程序转化为GUI程序
- mysql中常用的函数
- 【React】开发一个城市选择控件
- iTOP-6818开发板支持AXP228电源管理[官方推荐最佳匹配]_支持动态调频
- Java weak reference
- 微软官方的.net开发人员代码示例
- 读研 or 工作?对计算机类专业学习的看法
- VS2015安装ASP.NET MVC4
- 快速排序的C++版
- HDU 4585 Shaolin(水题,STL)