14.7. 自增操作符和自减操作符

#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;



}

你可能感兴趣的:(操作符)