面向对象程序设计报告文档格式.docx
- 文档编号:20831282
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:33
- 大小:137.77KB
面向对象程序设计报告文档格式.docx
《面向对象程序设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计报告文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
时间
题目与要求
设计如下类,其功能和部分成员如下:
Object:
抽象类,所有的物体都有价值(profit)属性;
Point:
点的位置三维空间;
LineSegment(线段),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
2015
概要设计
从设计的要求可知,要有一个最底层的抽象基类即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<
Point
*>
Po数据成员既可实现自动编号又可实现运行时的多态。
详细设计
在所有的类Point,LineSegment(线段),Rectangle,Cuboid,Square,Cube,Circle,Cylinder中包含一个构造函数,一个析构函数,并且在每个类中定义该类面积(area),长度(lenth),体积(volume)的计算方法,同时定义各个类放大,缩小,移动,打印功能的执行方法。
在操作类中定义所有的操作移动(move),放大(zoomin),缩小(zoomout),大小比较(compare),打印物品信息,其中,移动,放大,缩小几个功能返回该类所在的原函数进行,
大小比较在操作函数中进行,采用的方法是有体积比较体积,没体积比面积,没面积比长短,
打印操作还分为全部打印和单个打印。
在主函数中包含了一个功能菜单,用来方便操作,功能菜单通过指针连向所有功能函数。
功能实现示意图
继承
测试
添加物体的信息
移动物体的位置
放大或缩小物体
比较
打印
删除
结论
本学期较上学期来说做了更多的课程设计,有了更多的实践经验,对于此次的设计,我感觉知识的综合能力较强,毕竟c++已经学习了一个学期,对于类的设计也不能仅仅局限于一个或俩个,要学会从分散到集中,从少到多。
本次上机的主要目的是熟悉继承与派生(inheritance
and
polymorphism),这是c++的核心内容,也是比较难掌握的,但总的来说,这次上机实践我的收获还是很大的,我从中找到我的错误和不足之处。
对于这个面向对象的程序设计,我个人认为这个程序的优点在于:
1.在做的过程中使用了多文件的结构,便于编译和改错;
2.类的设计,在程序中共有10个类,,每个类都有自己独立的数据成员和函数成员,声明和定义都是分开的,都是按照类的标准设计来做的;
3.实现了运行时的多态,在Container类中用了vector<
Point*>
Po,即指向基类的指针容器,。
在缺点方面,首先是在继承与派生时对概念弄得不是很清晰,逻辑上出现了一些错误,再加上理解题意出了问题,导致派生关系弄得不对或复杂了,还有就是关于继承类的构造函数没有写好,忽略了关键点,即基类成员和新增成员的使用和关系,还有就是有功能没有实现,像给定一定数量的物品,假设物品的总容量超过容器最大容量,挑选部分装入容器中,设计算法实现所装物品的总价值最大。
程序安全性不足,存在内存泄漏等等,C++课本的教学知识已经学完了,但对于我来说还差得很远很远,光靠这一年的时间是远远不够的,需要更多的知识灌溉和实践,C++之路曼曼其修远兮,吾将上下而求索。
在以后的学习生活中多练习,用勤补拙,不断提高自己的c++水平。
要成为一名合格的程序员还有许多的路要走,我会一直坚持下去!
附录
**************************point.h*******************************
#ifndefPOINT_H
#definePOINT_H
#include<
iostream>
vector>
#include"
Object.h"
usingnamespacestd;
classPoint:
publicObject{
protected:
doublem_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(doublea,doubleb,doublec,doubled);
voidgetPoint();
virtualdoublegetlength(){return0;
virtualdoublegetarea(){return0;
virtualdoublegetvolume(){return0;
virtualvoidmovexyz();
virtualvoidzoom();
virtualvoidprint();
~Point(){}
};
#endif
************************line.h************************
#ifndefLINE_H
#defineLINE_H
Point.h"
classLine:
virtualpublicPoint{
doublem_length;
Line():
Point(){
m_length=0;
Line(Line&
Point(c){
m_length=c.m_length;
Line(doublea,doubleb,doublec,doubled,doublee);
doublegetlength();
doublegetvolume(){return0;
doublegetarea(){return0;
voidmovexyz();
voidzoom();
voidprint();
~Line(){}
*********************circle.h*****************************
#ifndefCIRCLE_H
#defineCIRCLE_H
classCircle:
doublem_R;
Circle():
m_R=0;
Circle(Circle&
m_R=c.m_R;
Circle(doublea,doubleb,doublec,doubled,doublee);
doublegetarea();
doublegetlength(){return0;
~Circle(){}
*********************container.h********************
#ifndefCONTAINER_H
#defineCONTAINER_H
Line.h"
Cylinder.h"
Cube.h"
Cuboid.h"
classContainer{
private:
Point*pi[20];
Pointpo[20];
Lineli[20];
Circleci[20];
Cylindercy[20];
Squaresq[20];
Rectanglere[20];
Cuboidcub[20];
Cubecu[20];
constdoubleV=50;
doubleVc=0;
vector<
Po;
voidAddobject();
voidMoveposition();
voidZoominorout();
voidCompare();
voidPrint();
voidDeleteobject();
Point*&
operator[](inti);
**********************cube.h********************************
#ifndefCUBE_H
#defineCUBE_H
Square.h"
classCube:
publicSquare{
doublem_High;
Cube();
Cube(doublep,doublex1,doublex2,doublex3,doubler,doublem_High);
Cube(Cube&
Square(c){
m_High=c.m_High;
doublegetvolume();
~Cube(){};
****************************cuboid.h******************************
#ifndefCUBOID_H
#defineCUBOID_H
Rectangle.h"
classCuboid:
publicRectangle{
Cuboid();
Cuboid(Cuboid&
Rectangle(c){
Cuboid(doublep,doublex1,doublex2,doublex3,doubler1,doubler2,doublem_High);
~Cuboid(){};
***************************cylinder.h********************
#ifndefCYLINDER_H
#defineCYLINDER_H
Circle.h"
classCylinder:
publicCircle{
doublem_high;
Cylinder():
Circle(){
m_high=0;
Cylinder(Cylinder&
Circle(c){
m_high=c.m_high;
Cylinder(doublea,doubleb,doublec,doubled,doublee,doublef);
~Cylinder(){}
*********************rectangle.h*************************
#ifndefRECTANGLE_H
#defineRECTANGLE_H
classRectangle:
publicPoint{
doubleR1,R2;
Rectangle();
Rectangle(Rectangle&
R1=c.R1;
R2=c.R2;
Rectangle(doublep,doublex1,doublex2,doublex3,doubler1,doubler2);
~Rectangle(){};
************************square.h************************
#ifndefSQUARE_H
#defineSQUARE_H
classSquare:
doubleR;
Square();
Square(Square&
R=c.R;
Square(doublep,doublex1,doublex2,doublex3,doubler);
~Square(){};
*****************************object.h*********************
#ifndefOBJECT_H
#defineOBJECT_H
constdoublePI=3.14;
classObject{
doubleProfit;
Object():
Profit(0){}
Object(doublea):
Profit(a){}
~Object(){}
virtualvoidprint()=0;
***********************point.cpp********************
Point:
:
Point(doublea,doubleb,doublec,doubled):
Object(a),m_x(b),m_y(c),m_z(d){
}
voidPoint:
getPoint(){
cout<
"
x坐标:
"
<
m_x<
y坐标:
m_y<
z坐标:
m_z<
endl;
movexyz(){
doublea,b,c;
请重新输入坐标:
cin>
>
a>
b>
c;
m_x=a;
m_y=b;
m_z=c;
zoom(){
点不能放大或缩小"
print(){
点:
cout<
价值:
Profit<
坐标:
("
"
)"
*************************line.cpp************************
Line:
Line(doublea,doubleb,doublec,doubled,doublee):
Point(a*e,b,c,d),m_length(e){
doubleLine:
getlength(){
returnm_length;
voidLine:
请重新输入中点坐标:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)