大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks

前缀(++i):
1、先自增后取值
2、重载时无参数
3、返回类型为引用,左值

后缀(i++):
1、先取值后自增
2、重载时有一个int参数,其值无实际意义,仅用来区别前缀和后缀
3、返回类型为const类型,右值


后缀的实现里需要用一个局部对象来保存自增前的值,以供返回,所以返回值类型不能为引用。
若返回不是const类型,则i++++只实现了对i的一次自增操作,因为第2次++的调用是对第一次调用返回的结果的操作,并没有对i操作,所以将返回类型声明为const,禁止了i++++这样的写法。

#include<iostream>

using namespace std;


class Base
{
public:
    Base():value(
0){}

    
//prefix
    Base& operator ++()
    
{
        cout
<<"prefix"<<endl;
        value 
+= 1;
        
return *this;
    }


    
//postfix
    const Base operator ++(int)
    
{
        Base tmp;
        tmp.value 
= this->value;
        
++(*this);
        cout
<<"postfix"<<endl;
        
return tmp;
    }


    
int value;
}
;


int main(int argc, char *argv[])
{
    Base b;        
//0
    b++;        //1
    cout<<b.value<<endl;
    
++b;        //2
    cout<<b.value<<endl;

    
return 0;
}


posted on 2009-05-15 14:56 大胖 阅读(320) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理