重载++/--运算符

今天看书,看到例子里有个重载自增运算符,前自增还比较好。看后自增的时候有点迷惑。查 c++primer才发现自己这里有知识漏洞。特此补上。

 

在为类定义自增自减运算符的时候要注意,如何区分前自增/自减 和 后自增/自减运算符。

 

1 定义前自增/自减运算符

 

class CheckedPtr{

public:

     CheckedPtr& operator++();

     CheckedPtr& operator--();

 

};

 

 

 

CheckedPtr& CheckedPtr::operator++()

{

if(curr==end)

throw out_of_range("");

++curr;

return* this;

}

 

CheckedPtr& CheckedPtr::operator--()

{

if(curr==beg)

throw out_of_range("");

--curr;

return* this;

}

 

 

为了与内置类型一致,前缀形式操作符返回被增或者减量对象的引用。

 

 

2 区别前缀和后缀形式

由于前缀和后缀的形参数目和类型相同,普通的重载不能区别所定义的前缀操作和后缀操作

 

后缀的形式要接收一个额外、无用的int型参。使用后缀式时编译器自动提供0作为实参,它的唯一目的是使用后缀函数与前缀函数区分开。

 

3 后缀形式操作符

 

 

class CheckedPtr{

public:

     CheckedPtr operator++(int);

     CheckedPtr operator--(int);

 

};

CheckedPtr& CheckedPtr::operator++()

{

CheckedPtr ret(*this);

++*this;

return ret;

}

 

CheckedPtr& CheckedPtr::operator--()

{

CheckedPtr ret(*this);

--*this;

return ret;

}

 

 

先是保存状态,然后调用自己前面定义的前缀操作。

 

PS:以上全部内容来自《C++ Primer》

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值