c++中字符重载的前址与后制

[复制链接]
查看11 | 回复1 | 2009-3-16 11:24:03 | 显示全部楼层 |阅读模式
#include
using namespace std;
class Integer
{
int value;
public:
Integer(int i = 0)
{
value = i;
}
Integer& operator++() (前置)
{
value++;
return *this;
}
const Integer operator++(int) (后置)
{
Integer temp = *this;
++(*this);
return temp;
}
int getInt()
{
return value;
}
};
void main()
{
Integer a(100),b,c;

b=++a;
cout << b.getInt() << " " << a.getInt() << endl;
c=a++;
cout << c.getInt() << " " << a.getInt() << endl;
}

为什么那是(前置)另一个后(后置)?
他们怎么区分?怎么应用?
谢谢!前辈帮忙...

回复

使用道具 举报

千问 | 2009-3-16 11:24:03 | 显示全部楼层
这是为了区分++obj和obj++两种运算重载,而人为的增加一个无实际用处的参数。至于为什么是前置++不带参数,可能是制定规则的人人为++的实现要简单一些。如果只需要重载一种情况,就重载这个吧。用得多的东西当然是越简单越好,就不用带参数了 —— 纯属猜想,不过可以帮助记忆。一般重载++运算符用于实现自己的迭代子。好处是,使这个迭代子的行为可以和指针兼容。这样就可以方便设计一个即可以用于指针又可以用于迭代子的模板。例如:在STL中std:list:iterator就重载了++,运算后,iterator指向链表的下一个元素。否则,写成it.next(),那么写一个遍历list的模板就无法适用于C数组了。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行