C++至少需要将一个重载操作的操作对象做为用户自定义类型。这个自定义类型不必是一个完整的类,但一定要是enum类型。
对于一个enum类型来说,重载操作符++和--是非常有用的。因为这种类型允许你通过计数器进行迭代,就好像把它当作普通的整数一样。我们来举个enum类型的例子:
enum Days { Mon, Tue, Wed, Thur, Fri, Sat, Sun };
如果我们想显示每个计数器里的数值,我们可以这样做:
#include 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 (++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类型的空参数。
|