




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计(二),吕俊白,第十章面向对象程序设计实例,所谓面向对象的程序设计方法就是运用面向对象的观点来描述现实问题,然后用计算机语言来描述并处理该问题。这种描述和处理是通过类与对象实现的,是对现实问题的高度概括、分类和抽象。运用面向对象的观点来描述现实问题,首先要对现实世界中的对象进行分类,然后抽象出一类对象的共性并加以描述。,面向对象的分析和设计步骤:P:367,(1)找出类;(2)描述类和类之间的关系;(3)用类来界定抽象层次,从而组织程序结构。在这当中找出类和描述类和类之间的关系是关键。,找出类,找出类主要靠经验,程序员可由一系列候选类开始,然后,考虑哪一个是最基本的,哪一个是第二位的或者是被引出的。候选类可从以下各项找出:1)有形的、可视的或可描述的东西;(如:电视机、微波炉、桌子、问题等)2)角色;(如:操作电视机的人、桌子上摆放的东西、问题中涉及的链表结构等)3)事件(如:调节电视机的亮度、桌子的移动、问题中描述的操作等),对于复杂的问题,程序员必须做一个全面深入的分析,并充分了解问题的各项细节,然后对问题进行分类,抽象出要描述的类。对于简单的问题,通过问题陈述和列出名词表,可以帮助解决问题。,例如:,请用面向对象的程序设计方法来求解Josephus问题。Josephus问题:问题描述:一群(n个)小孩围成一圈做游戏,假定一个数m,从第s个小孩起,顺时针方向数,每数到第m个小孩时,该小孩便离开。小孩不断离开,圈子不断缩小。最后,剩下的一个小孩便是胜利者。对于一定的n、m和s,究竟胜利者是谁呢?,用环形链表来表示小孩围成圈,每个结点代表一个小孩。步骤:(1)列出Josephus问题的名词表:小孩;链表;小孩数;开始位置;数数间隔;小孩离开;输出胜利者,(2)把类中要用到的数据属性(数据成员)和操作(函数成员)描述清楚。,左面是操作描述,表示类的外部界面;右面是数据属性描述。,(3)设计程序P:372,Josephus类界面(函数成员)构造函数求获胜者内部数据成员小孩数开始位置数数间隔,BoyRing(环链表)类界面(函数成员)构造函数析构函数根据数数间隔数小孩小孩离队(从环链中去掉当前小孩)返回当前小孩编号输出所有小孩内部数据成员小孩结构数组指针小孩哨兵指针当前小孩指针,/主函数创建一个Josephus类对象调用getWinner求获胜者,算法实现:P:375Josephus,/boyring.h#ifndefHEADER_BOYRING#defineHEADER_BOYRINGstructBoyintcode;Boy*next;/-classBoyRingBoy*pBegin,*pivot,*pCurrent;public:BoyRing(intn);voidcountBoy(intm);intgetNum()const;voiddisengage();voidprintAll()const;BoyRing();/=#endif/HEADER_BOYRING,/boyring.cpp#includeboyring.h#includeusingnamespacestd;/-BoyRing:BoyRing(intn)if(nnext=pCurrent-next;pCurrent=pivot;/-,voidBoyRing:printAll()constintnuminLine=0;Boy*p=pCurrent;docoutcode;if(!(+numinLine%10)coutnext;while(p!=pCurrent);coutn;/-BoyRing:BoyRing()deletepBegin;/-,/jose.h#ifndefHEADER_JOSE#defineHEADER_JOSEclassJosephusprotected:intn,m,s;public:Josephus(intboys,intinterval,intbegin=1);voidgetWinner()const;/=#endif/HEADER_JOSE,/jose.cpp#includeboyring.h#includejose.h#includeusingnamespacestd;/-Josephus:Josephus(intboys,intinterval,intbegin):n(boys),m(interval),s(begin)if(n=n|s=n)cerrdataerror.n;throwexception();/-,voidJosephus:getWinner()constcoutTherearenboys.nBoysleavedinorder:n;BoyRingx(n);x.countBoy(s-1);for(inti=1,numinLine=0;in;+i)x.countBoy(m);coutx.getNum()(+numinLine%10?:n);x.disengage();coutnthewinnerisnx.getNum()ms;Josephus(n,m).getWinner();Josephus(n,m,s).getWinner();return1;/=,在面向对象程序设计中,程序设计主要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 丽水龙泉数学试卷
- 青岛6年级数学试卷
- 纤维吸湿性测试报告
- 全国文科3卷数学试卷
- 南宁市中考三模数学试卷
- 励才初三数学试卷
- 橡胶密封性能优化策略报告
- 2025年航天器及其运载工具、零件项目合作计划书
- 钩针动漫服饰定制市场分析报告
- 区域配送协同模式比较报告
- 《材料成型装备及自动化》课程大纲
- 公文写作高频词库
- 临时用电JSA分析表
- DB33-T1217-2020《屋面工程质量验收检查用表标准》
- 如何提高护士对患者病情掌握的知晓率
- 固定式压力容器年度检查报告
- 塑胶模具术语中英文对照1
- 浅谈南京图书馆新馆空调冷热源方案的选择
- 工程竣工验收与竣工备案流程组织PPT通用课件
- (高清版)建筑楼盖结构振动舒适度技术标准JGJ_T 441-2019
- YY_T-_组织工程医疗器械产品透明质酸钠
评论
0/150
提交评论