- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中国地质大学面向对象程序设计课设报告
《面向对象程序设计》 课程设计报告学 号:班级序号:姓 名: 指导老师: 杨林权 中国地质大学(武汉)信息工程学院遥感系2017年6月实习题目一1) 下面为一个二维空间点类,圆类,矩形类。阅读代码,将其功能全部完善。并编写主函数进行测试。(30分)2) 完成第一步的工作后,进行一个类的整体改进,抽象出一个高层的抽象基类,使用虚函数,继承等面向对象特征对这些类进行改进。(10分)3)将代码结合到MFC的单文档视图框架里,进行图形化显示、菜单和鼠标交互操作。(10分)【设计思想】用类来实现题目要求,先按要求实现题目所给三个类的成员函数,然后再抽象出基类。程序中圆类和矩形类的实现主要靠调用点类的成员函数。点类中定义的一系列重组函数为三个类中各成员函数的实现提供了方便,对象之间的计算使得程序更具有可操作性。本题。三个类中最复杂的是点类,成员函数特别多,完成的难度最大。其中,点类作为基础部分,为圆类和矩形类中部分函数的实现提供条件。【设计表示】 【算法分析】本题主要的算法就是实现函数的调用以及类的基本知识(一个类调用另一个类的成员函数)。例如:圆类中求两圆交点的函数就调用了点类中的getdistancet(计算点之间的距离),normalize,getDirection(利用向量与x轴的夹角)等函数。在normalize ()函数中调用getDirection()来得到正规化坐标以后的点的坐标。求两相交圆相交部分面积的函数getIntersectionArea (),也调用了点类中的getdistancet()、getDirection()等函数。【调试报告】编写本题最初遇到的困难是,题目所给的信息量太大,题中涉及到的变量,常量非常多,不知道这些量所代表的实际意义,所以便有一种法无从下手的感觉。特别是点类一开始的一系列重组函数,起初不明白其意图,也就不好写出其函数体。调试时,程序中偶尔回出现致命性的错误,明明在于语法上没有错误,但无法运行得到结果。应该是程序的逻辑混乱导致。调试结果如下:【小结】通过对本题的实习,对类的知识有了更进一步的了解,对类之间各种成员变量,函数的调用更加熟悉。知道怎样去调用另一个类中的成员函数。这个题除了锻炼对类的理解外,还增强了我们对程序编写的整体把握,让我们的思路不局限于一个函数或几个函数的调用,而是掌握几个类之间的相互作用。【主要函数代码】//求两个圆的相交面积double getIntersectionArea(Circlec) {if (m_posCenter.getDistanceTo(c.m_posCenter) m_dRadius + c.m_dRadius) {if (m_posCenter.getDistanceTo(c.m_posCenter) sqrt(m_dRadius - c.m_dRadius)) {//相交double d, s1, s2;d = m_posCenter.getDistanceTo(c.m_posCenter);s1 = (acos((m_dRadius*m_dRadius + d*d - c.m_dRadius*c.m_dRadius) / (2 * m_dRadius*d))*m_dRadius*m_dRadius) - (m_dRadius*m_dRadius*sin(2 * (acos((m_dRadius*m_dRadius + d*d - c.m_dRadius*c.m_dRadius) / (2 * m_dRadius*d))))) / 2;s2 = (acos((c.m_dRadius*c.m_dRadius + d*d - m_dRadius*m_dRadius) / (2 * c.m_dRadius*d))*c.m_dRadius*c.m_dRadius) - (c.m_dRadius*c.m_dRadius*sin(2 * (acos((c.m_dRadius*c.m_dRadius + d*d - m_dRadius*m_dRadius) / (2 * c.m_dRadius*d))))) / 2;return s1 + s2;}else {//内含if (m_dRadius c.m_dRadius)return (c.m_dRadius*c.m_dRadius*PI);elsereturn (m_dRadius*m_dRadius*PI);}}elsereturn 0;}double getMagnitude() {//获取向量长度return sqrt(m_x*m_x + m_y*m_y);};//获取向量方向(与X轴夹
文档评论(0)