现在的位置: 首页 > 综合 > 正文

自增(++)和自减(–)操作符

2018年04月30日 ⁄ 综合 ⁄ 共 1539字 ⁄ 字号 评论关闭

自增操作符和自减操作符经常要在我们自定义的类类型中使用到,而使用时经常会出现问题。现把自己在学习的过程中的代码拿出来看一下,也是c++ primer中的例子如下:
<pre class="cpp" name="code">#ifndef  _CHECK_PTR_
#define  _CHECK_PTR_

#include&lt;iostream&gt;
using namespace std;

class checkPtr
{
public:
 checkPtr(int *b,int *e);
 // 前向自增、自减操作符
 checkPtr&amp; operator ++ ();
 checkPtr&amp; operator -- ();

 // 后缀是操作符
 checkPtr operator ++ ( int );
 checkPtr operator -- ( int );

 // 显示当前指针值
    void PrintCurValue( );
private:
 int *beg;
 int *end;
 int *cur;
 
};

#endif</pre>
<br />
#include "checkPtr.h"

checkPtr::checkPtr(int *b,int *e):beg(b),end(e),cur(b)
{
 
}

// 前向自增操作符
checkPtr& checkPtr::operator ++()
{
 cout<<"调用前向自增操作符"<<endl;
 if ( cur == end )
  throw out_of_range("increment past the end of CheckPtr");
 ++cur;
 return *this;
}
// 前向自减操作符
checkPtr& checkPtr::operator --()
{
 cout<<"调用前向自减操作符"<<endl;
 if ( cur == beg )
  throw out_of_range("decrement past the beginning of CheckedPtr");
 --cur;
 return *this;
}

//后缀自增操作符
checkPtr checkPtr::operator ++ ( int )
{
 cout<<"调用后缀自增操作符"<<endl;
 checkPtr ret(*this);
 ++*this;
 return ret;
}

//后缀自减操作符
checkPtr checkPtr::operator -- ( int )
{
 cout<<"调用后缀自减操作符"<<endl;
 checkPtr ret(*this);
 --*this;
 return ret;
}

// 显示当前指针值
void checkPtr::PrintCurValue()
{
 cout<<"当前指针指向的元素值为:"<<*cur<<endl;
}

#include "checkPtr.h"
int main( )
{
 int ia[]={1,2,3,4,5};
 checkPtr pArr(ia,ia+5);
 ++pArr;
    pArr.PrintCurValue();
 pArr++;
 pArr.PrintCurValue();
 return 0;
}

在上面代码中,可以看到在前向操作符和后缀操作符的处理时,有需要注意的点:
1.前缀和后缀两种形式,首先在类的声明中不同,后缀比前缀多了一个形参(int),而这个形参本身是没有值的,编译前默认赋给0,其目的
   只是为了区分开前缀和后缀这两种表达形式。
2.前置返回的是对象的引用,即对象本身,做完自增或自减后返回*this,即返回本对象的引用。
3.后置操作符返回的是本对象的一个副本,它返回的是一个旧值。而对象本身this进行自增和自减不变。这样操作都是为了和内置操作符一致。
4.因为这些操作符改变了对象的状态,所以一般定义为类的成员函数。

抱歉!评论已关闭.