




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在大家开发网络通讯软件的时候,应该都碰到过这种情况,在定义好通讯后要在程序中实现相应的功能。如:一个聊天程序有如下定义:登陆获取好友列表修改自己资料N退出每个功能由如下函数实现:登陆Void Login(UserIinfouser,Messagemsg);获取好友列表void GetFriendList(UserInfouser,Messagemsg);修改自己资料void ModifySelfInfomation(UserInfouser,Messagemsg);退出Void Logout(UserInfouser,Messagemsg);那现在我们要将它一一对应起来,我们该怎么做呢?很多人也许会这样做 public static void Analyze(UserInfo user, Message message) . switch (msg.Class)/Class是的类型标志,下同 . case 1: Login(user, message); break; case 2: GetFriendList(user, message); break; case 3: ModifySelfInfomation(user, message); break; case N: Logout(info, msg); break; default: break; 这样做看起来没有什么不妥。但是如果协议条数非常多或者说很复杂呢?比如说:我的协议是二级甚至是三级分类的呢?用更多的switch和case?这样显然不是一个好主意。在C+和Delphi中我们可以用函数指针数组来很好的解决这个问题。那我们在是不是也可以这样去解决这个问题呢?答案是肯定的。我们可以在中用委托数组来解决这个问题。让我们先定义一个委托和它的数组:private delegate void AnalyzerHandler(UserInfo user, Message message);static AnalyzerHandler MainAnalyzer;然后将函数都放到这个数组里: MainAnalyzer = new AnalyzerHandler . Login, GetFriendList, ModifySelfInfomation, Logout 那我们怎么调用呢?很简单,这样就行了! public static void Analyze (UserInfo user, Message message) . if (message.Class MainAnalyzer.Length|message.Classtype) case FREQUENT_MSG1: handleFrequentMsg(); break; case FREQUENT_MSG2: handleFrequentMsg2(); break; . case FREQUENT_MSGn: handleFrequentMsgn(); break; default: /嵌套部分用来处理不经常发生的消息 switch (pMsg-type) case INFREQUENT_MSG1: handleInfrequentMsg1(); break; case INFREQUENT_MSG2: handleInfrequentMsg2(); break; . case INFREQUENT_MSGm: handleInfrequentMsgm(); break; 如果switch中每一种情况下都有很多的工作要做,那么把整个switch语句用一个指向函数指针的表来替换会更加有效,比如下面的switch语句,有三种情况: enum MsgTypeMsg1, Msg2, Msg3 switch (ReceiveMessage() case Msg1; . case Msg2; . case Msg3; . 为了提高执行速度,用下面这段代码来替换这个上面的switch语句。 /*准备工作*/ int handleMsg1(void); int handleMsg2(void); int handleMsg3(void); /*创建一个函数指针数组*/ int (*MsgFunction )()=handleMsg1, handleMsg2, handleMsg3; /*用下面这行更有效的代码来替换switch语句*/ status=MsgFunctionReceiveMessage()(); (10)避免使用C+的昂贵特性 C+在支持现代软件工程、OOP、结构化等方面对C进行了卓有成效的改进,但在程序代码容量、执行速度、程序复杂程度等方面比C语言程序性能差一些。并不是所有的C+特性都是肮贵的。比如,类的定义是完全有益的。公有和私有成员数据及函数的列表与一个 struct 及函数原形的列表并没有多大的差别。单纯的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管道阀门考试题及答案
- 瓦斯抽采考试试题及答案
- 预算岗位面试题及答案
- 运动协调:成长加速器
- 记忆障碍试题及答案
- 空间跃迁测试题及答案
- 怎样培养孩子的团队习惯
- 用Scratch启蒙编程思维
- 家电公司合同履行管理细则
- 2020-2025年材料员之材料员专业管理实务考前冲刺模拟试卷A卷含答案
- GB/T 10781.1-2006浓香型白酒
- KAX-1铁路客车安全记录仪检修说明书
- 麦当劳-标准化管理
- 法国西电MICS中文操作说明书
- (高清正版)JJF 1908-2021 双金属温度计校准规范
- 交通部农村公路建设标准指导意见
- 清表施工方案4常用
- 纯化水系统再验证方案E
- 5立方米液化石油气储罐课程设计说明书
- 临床技术操作规范_骨科学分册资料全
- 华为内部虚拟股管理暂行条例
评论
0/150
提交评论