标签:
#include<iostream>
#include<string>
using namespace std;
/*
14.7. 自增操作符和自减操作符
*/
//可以定义一个类,该类指向一个数组并为该数组中的元素提供访问检查
/*
构造函数的参数是两个指针:一个指向数组的开始,另一个指向数组的末端。
构造函数用这两个指针初始化 beg 和 end,并将 curr 初始化为指向第一个元
素。
*/
class checkedptr
{
public:
checkedptr(int* a,int* b):beg(a),end(b),curr(a){}
//前缀的自增自减
checkedptr& operator++();
checkedptr& operator--();
//后缀的自增自减
checkedptr operator++(int);
checkedptr operator--(int);
private:
int* beg;
int* end;
int* curr;
};
/*
为了与内置类型一致,前缀式操作符应返回被增量或减
量对象的引用。
这个自增操作符根据 end 检查 curr,从而确保用户不能将 curr 增量到超
过数组的末端。如果 curr 增量到超过 end,就抛出一个 out_of_range 异常;
否则,将 curr 加 1 并返回对象引用:
*/
checkedptr& checkedptr::operator++()
{
if(curr==end)
throw out_of_range("beyond the end");
++curr;
return *this;
}
checkedptr& checkedptr::operator--()
{
if(curr==beg)
throw out_of_range("below the beg");
--curr;
return *this;
}
/*
为了解决这一问题,后缀式操作符函数接受一个额外的(即,无用的)int 型
形参。使用后缀式操作符进,编译器提供 0 作为这个形参的实参。尽管我们的
前缀式操作符函数可以使用这个额外的形参,但通常不应该这样做。那个形参不
是后缀式操作符的正常工作所需要的,它的唯一目的是使后缀函数与前缀函数区
别开来。
为了与内置操作符一致,后缀式操作符应返回旧值(即,
尚未自增或自减的值),并且,应作为值返回,而不是
返回引用。
*/
checkedptr checkedptr::operator++(int)
{
checkedptr ret(*this);
++*this;
return ret;
}
checkedptr checkedptr::operator--(int)
{
checkedptr ret(*this);
--*this;
return ret;
}
int main()
{
system("pause");
return 1;
}
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4397522.html