教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> 编程基地 >> C++ >> enum类型的重载操作 RSS订阅
enum类型的重载操作
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

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类型的空参数。

来源:十度教育
作者:
关键字:enum类型,重载操作
发表日期:2006-6-29 1:20:57

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:C++编程技巧   下一篇:浅谈C++中的内存管理


2008-8-21 14:44:26
本文的相类似文章
  • enum类型的重载操作
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com