码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-07 11:17:46      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

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

}

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

标签:

原文地址:http://www.cnblogs.com/yanliang12138/p/4397522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!