作为类成员使用。

前缀是先加/减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 ;
}

最新文章

  1. gridview安卓实现单行多列横向滚动
  2. IOS开发基础知识--碎片29
  3. 关于学习angularJS 的一些心得
  4. 在Centos6下面安装Python3.4
  5. Jquery 点击按钮将其背景图换成另一张,再次点击恢复默认图片
  6. postman本地或远程访问不了
  7. Apache下Worker模式MPM参数分析
  8. COJ 0020 30201象棋中的皇后
  9. 在 sublime text 上添加 Package Control
  10. word中正文分栏重新换页问题
  11. Qt5+MSVC2015环境将VS2015编写的控制台程序转化为GUI程序
  12. mysql中常用的函数
  13. 【React】开发一个城市选择控件
  14. iTOP-6818开发板支持AXP228电源管理[官方推荐最佳匹配]_支持动态调频
  15. Java weak reference
  16. 微软官方的.net开发人员代码示例
  17. 读研 or 工作?对计算机类专业学习的看法
  18. VS2015安装ASP.NET MVC4
  19. 快速排序的C++版
  20. HDU 4585 Shaolin(水题,STL)

热门文章

  1. 关于诺顿身份安全2013独立版(Norton Identity Safe)
  2. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
  3. 关于JAVA多线程的那些事__初心者
  4. 免费的天气Web Service接口
  5. redis的文件事件处理器
  6. 关于刘冬大侠Spring.NET系列学习笔记3的一点勘正
  7. 计算Excel中的Sheet个数
  8. Java常见排序算法之归并排序
  9. Cookie和Session专题
  10. INDY idhttp Post用法