重载operator++
参考:www.cnblogs.com/ggggg63/p/6693008.html
(作为成员函数的)前置“++”不接受任何参数,而后置“++”接受一个int类型的参数,尽管没什么实际用途,但是却为编译器确定重载对象提供了帮助。
还有一点,则是需要特殊小心地处理返回值问题。前置++通常情况应该返回对象的引用,而后置式的++应该返回一个const修饰的对象实体。
1. 一般重载为成员函数 //prefix ++ : increment and fetch myclass & myclass::operator++() { *this += 1; return *this; } //postfix ++ : fetch and increment const myclass myclass::operator++(int) { myclass tmp = *this; ++(*this); return tmp; } 2. 也可重载为非成员函数(很少这么做) friend myclass& operator(myclass& a); // 前++ friend myclass operator(myclass& a, int); //后++
例子:
class point { public: point(int val) { x=val; } //(作为成员函数的)前置“++”不接受任何参数,而后置“++”接受一个int类型的参数, //尽管没什么实际用途,但是却为编译器确定重载对象提供了帮助。 point& operator++() //前++ { x++;// this->x += 1; return *this; } const point operator++(int) //后++ { point old=*this; ++(*this); return old; } int GetX() const { return x; } private: int x; }; int main() { point a(10); cout<<(++a).GetX(); cout<<a++.GetX(); return(0); } // 结果: 1111
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。