重载方式:
class UPInt{
public:
UPInt& operator++(); //前置式++
const UPInt operator++(int); //后置式++
UPInt& operator--(); //前置式--
const UPInt operator--(int); //后置式--
UPInt& operator+=(int); //+=操作符,结合UPInts和ints
};
UPInt i;
++i; //调用i.operator++()
i++; //调用i.operator++(0)
--i; //调用i.operator--()
i--; //调用i.operator--(0)
前置自增:累加然后取出
后置自增:取出然后累加
实现:
//前置式:累加然后取出
UPInt& UPInt::operator++()
{
*this += 1;
return *this;
}
//后置式:取出然后累加
const UPInt UPInt::operator++(int)
{
UInt oldValue = *this;
++(*this); //调用前置
return oldValue; //返回先前被取出的值
}
后置返回const对象的原因是,如果不这样做,以下动作是合法的:
UPInt i;
i++++; //实施两次后置自增
//类似于
i.operator++(0).operator++(0);
operator++的第二个调用动作施行于第一个调用动作的返回对象身上。
总结:处理用户定制类型时,应该尽可能使用前置式自增,效率较高。后置自增和自减操作符的实现应以前置式兄弟为基础,如此一来你就只需要维护前置式版本,因为后置式版本会自动调整为一致的行为。
|