好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

面向对象程序设计报告样本.doc

57页
  • 卖家[上传人]:新**
  • 文档编号:530290694
  • 上传时间:2023-12-28
  • 文档格式:DOC
  • 文档大小:203.50KB
  • / 57 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除面向对象程序设计( C++) 课程设计报告班级: 191152学号: 1001188姓名: 夏体凡日期: 7月4日 目录一、 原创性申明…………………………………………3二、 题目与要求…………………………………………4三、 需求分析…………………………………………….4四、 概要设计……………………………….…………..5五、 详细设计…………………………………….……5六、 测试……………………………………………….….7七、 结论 …………………………………………….…..9八、 附录 ………………………………………….….11 原创性声明: 本人声明报告者中的内容和程序为本人独立完成, 引用她人的文献、 数据、 图件、 资料均已明确标注出除标注内容外, 不包含任何形式的她人成果, 无侵 权和抄袭行为, 并愿意承担由此而产生后果作者签字: 时间: 指导教师评语: 课程成绩: 程序界面 ( 10 分) 程序结构和功能 ( 40 分) 程序安全和效率 ( 40 分) 报告 ( 10 分) 指导教师签字: 时间 题目与要求设计如下类, 其功能和部分成员如下: Object: 抽象类, 所有的物体都有价值( profit) 属性; Point: 点的位置三维空间; Line Segment( 线段) , Rectangle, Cuboid, Square, Cube, Circle, Cylinder功能: 能够实现上述物体的移动( move) , 放大(zoomin), 缩小(zoomout), 大小比较(compare), 打印物品信息( cout<<编号、 面积、 容积和价值) 等操作, 且所有物品的对象实现自动编号。

      移动: Line类对象移动其中点, Rectangle、 Square和Circle: 移动重心, Cubiod、 Cube和Cylinder: 移动底面重心放大和缩小: 以倍数为参数, 进行相应组件的放大和缩小判断: 空间内某一点(Point)是否在另一物体内; 线段(Line)是否和另一物体相交默认比较方式: Line: 比较长度, Rectangle、 Square和Circle: 比较面积Cubiod、 Cube和Cylinder: 比较体积同维度( 或不同维度) 空间内的不同类物体之间可进行大小比较 相等返回0, 小于返回-1、 大于返回1再设计一个容器类( Container) . 容器具有最大容量属性功能: 能容纳以上定义的各种3D物品( Cylinder, Cube和Cuboid) , 实现添加一个物品(add), 移除容器里的一个物品(remove),重载[], 排序: 不改变物品在容器中的位置( 下标) , 把物品的id按照排序结果(根据物品某一关键字)返回 ; 附加功能: 给定一定数量的物品( 假设物品的总容量超过容器最大容量) , 挑选部分装入容器中, 设计算法实现所装物品的总价值最大。

      需求分析1.本次上机题目主要运用继承和派生建立多个类, 这些类都主要一个点类point继承而来, 然后每一个类设计一个头文件和一个源文件, 然后最后设计一个操作类container, 用来处理移动( move) , 放大(zoomin), 缩小(zoomout), 大小比较(compare), 打印物品信息( cout<<编号、 面积、 容积和价值) 等操作, 最后设计一个主函数, 用来控制整个系统2.系统环境、 运行要求: Visual Studio    概要设计从设计的要求可知, 要有一个最底层的抽象基类即Object类, 然后就是多个类之间的关系, Point继承Object——然后Line继承Point, 添加length新成员; Circle继承Point, 添加新成员R; Square继承Point, 添加L1新成员; Rectangle继承Point, 添加L1, L2新成员; 最后Cylinder继承Circle, 添加height新成员; Cube继承Square, 添加high新成员; Cuboid继承Rectangle, 添加high新成员。

      这样就完成了继承与派生类的设计除了这些类, 还必须有操作, 否则就没有意义了, 要实现上述物体的move, zoomin, zoomout, compare, 打印物品信息等操作, 这里要用到运行时的多态, 即需要基类的指针, 将在下一条详细讲, 这里要做的是函数成员的设计, 这要求在每个类要有同名函数, 即( overriding a virtual function) , 返回值类型, 参数类型等都得一样, 而且基类的要是virtual function再设计一个容器类Container, 所有物品的对象实现自动编号这里的容器要用vector来做, 我们在Container类中定义vector Po数据成员既可实现自动编号又可实现运行时的多态详细设计在所有的类Point,Line Segment( 线段) , Rectangle, Cuboid, Square, Cube, Circle, Cylinder中包含一个构造函数, 一个析构函数, 而且在每个类中定义该类面积( area) , 长度(lenth), 体积(volume)的计算方法,同时定义各个类放大, 缩小, 移动, 打印功能的执行方法。

      在操作类中定义所有的操作移动( move) , 放大(zoomin), 缩小(zoomout), 大小比较(compare), 打印物品信息, 其中, 移动, 放大, 缩小几个功能返回该类所在的原函数进行, 大小比较在操作函数中进行, 采用的方法是有体积比较体积, 没体积比面积, 没面积比长短, 打印操作还分为全部打印和单个打印在主函数中包含 了一个功能菜单, 用来方便操作, 功能菜单经过指针连向所有功能函数功能实现示意图圆类菜单操作圆柱类 继承线类显示点类正方体 矩形类长方体类测试添加物体的信息移动物体的位置放大或缩小物体比较 打印删除结论本学期较上学期来说做了更多的课程设计, 有了更多的实践经验, 对于此次的设计, 我感觉知识的综合能力较强, 毕竟c++已经学习了一个学期, 对于类的设计也不能仅仅局限于一个或俩个, 要学会从分散到集中, 从少到多本次上机的主要目的是熟悉继承与派生( inheritance and polymorphism) , 这是c++的核心内容, 也是比较难掌握的, 但总的来说, 这次上机实践我的收获还是很大的, 我从中找到我的错误和不足之处。

      对于这个面向对象的程序设计, 我个人认为这个程序的优点在于: 1.在做的过程中使用了多文件的结构, 便于编译和改错; 2.类的设计, 在程序中共有10个类, , 每个类都有自己独立的数据成员和函数成员, 声明和定义都是分开的, 都是按照类的标准设计来做的; 3.实现了运行时的多态, 在Container类中用了vector Po, 即指向基类的指针容器, 在缺点方面, 首先是在继承与派生时对概念弄得不是很清晰, 逻辑上出现了一些错误, 再加上理解题意出了问题, 导致派生关系弄得不对或复杂了, 还有就是关于继承类的构造函数没有写好, 忽略了关键点, 即基类成员和新增成员的使用和关系, 还有就是有功能没有实现, 像给定一定数量的物品, 假设物品的总容量超过容器最大容量, 挑选部分装入容器中, 设计算法实现所装物品的总价值最大程序安全性不足, 存在内存泄漏等等, C++课本的教学知识已经学完了, 但对于我来说还差得很远很远, 光靠这一年的时间是远远不够的, 需要更多的知识灌溉和实践, C++之路曼曼其修远兮, 吾将上下而求索在以后的学习生活中多练习, 用勤补拙, 不断提高自己的c++水平。

      要成为一名合格的程序员还有许多的路要走, 我会一直坚持下去! 附录**************************point.h*******************************#ifndef POINT_H#define POINT_H#include#include#include"Object.h"using namespace std;class Point :public Object {protected: double m_x, m_y, m_z;public: Point() :Object() { m_x = m_y = m_z = 0; } Point(Point & c) :Object(c) { m_x = c.m_x; m_y = c.m_y; m_z = c.m_z; } Point(double a, double b, double c, double d); void getPoint(); virtual double getlength() { return 0; } virtual double getarea() { return 0; } virtual double getvolume() { return 0; } virtual void movexyz(); virtual void zoom(); virtual void print(); ~Point() {}};#endif************************line.h************************#ifndef LINE_H#define LINE_H#include#include#include"Point.h"using namespace std;class Line :virtual public Point {protected: double m_length;public: Line() :Point() { m_length = 0; } Line(Line & c) :Point(c)。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.