标签:
#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