对于一个enum类型来说,重载操作符++和--是非常有用的。因为这种类型允许你通过计数器进行迭代,就好像把它当作普通的整数一样。我们来举个enum类型的例子:
enum Days {
Mon,
Tue,
Wed,
Thur,
Fri,
Sat,
Sun
};
如果我们想显示每个计数器里的数值,我们可以这样做:
#include <iostream>
int main()
{
Days day = Mon;
for (int n=0; n<7; ++n) /* display days as int's */
{
std::cout << day << std::endl;
++day;
}
}
也许让你很吃惊的是,尽管没有定义使用操作数++的重载方式,但这个程序依然可以通过编译,然后正常的运行。这是因为C++将enum类型的day强制转换成了int类型并且利用嵌入式的++增加它的值。在下面的例子中很清楚的展示我们是怎么达到目的的。
但是,请思考一下如果将for循环做一个小小的变化,整个程序将会发生怎样的变化。
for (int n=0; n<14; ++n) /* display days as int's
*/
{
std::cout << day << std::endl;
++day;
}
}
当程序进行第七次叠加的时候,循环显示出了非法的数值:8,9,10……在第七次叠加后,我们希望看到循环翻转,而不是无止境的增加天数,那就是说希望值是1,2,3……6,0,1……为了让程序达到这个性能,我们需要定义一个重载操作符++,如下:
Days & operator++(Days & d) //prefix ++
{
if (d == Sun)
return d = Mon; // rollover
int temp = d;
return d = static_cast <Days> (++temp);
}
int main()
{
Days day = Mon;
for (int n=0; n<14; ++n) // display days as int's
{
std::cout << day << std::endl;
++day;
}
}
注意,你可以选择操作符++的重载方式:前缀或者后缀。如果采用后缀方式则要在强制性的参数后使用一个int类型的空参数。