已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (完整版)数学苏教六年级下册期末测试题目A卷答案
- (完整版)新初一分班数学模拟真题真题A卷解析
- 数字办公专员办公设备运维服务应急预案
- (完整版)苏教六年级下册期末数学重点中学题目
- 南京科技产业分析报告
- 延边护士专业实践操作技巧与要点
- 2025年企业面试题测试题及答案
- 第6课《散步》说课稿+2025-2026学年统编版语文七年级上册
- 浙江国企招聘2025金华义乌市水利工程管理有限公司员工招聘14人笔试历年参考题库附带答案详解
- 2025贵阳市康养集团有限公司三医康养服务分公司招聘2人笔试历年参考题库附带答案详解
- 常见工业气瓶使用安全培训
- 夹北线大山一号、二号特大桥改建工程环评报告
- 小儿推拿-中医一绝智慧树知到答案章节测试2023年浙江中医药大学
- TSGD0012023年压力管道安全技术监察规程-工业管道(高清晰版)
- GB/T 9756-2001合成树脂乳液内墙涂料
- GB/T 9112-2010钢制管法兰类型与参数
- 农机安全生产培训课件
- 高职答辩题库卫生儿科进展部分
- 冠心病心绞痛教学-课件
- Auto-CAD-2019实例教程教学ppt课件(完整版)
- 申请人申请仲裁送达信息确认书
评论
0/150
提交评论