面向对象程序设计报告.docx

上传人:b****5 文档编号:7892999 上传时间:2023-01-27 格式:DOCX 页数:33 大小:138.84KB
下载 相关 举报
面向对象程序设计报告.docx_第1页
第1页 / 共33页
面向对象程序设计报告.docx_第2页
第2页 / 共33页
面向对象程序设计报告.docx_第3页
第3页 / 共33页
面向对象程序设计报告.docx_第4页
第4页 / 共33页
面向对象程序设计报告.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

面向对象程序设计报告.docx

《面向对象程序设计报告.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计报告.docx(33页珍藏版)》请在冰豆网上搜索。

面向对象程序设计报告.docx

面向对象程序设计报告

面向对象程序设计(C++)

课程设计报告

 

班级:

191152

学号:

188

姓名:

夏体凡

日期:

2016年7月4日

 

一、原创性申明…………………………………………3

二、题目与要求…………………………………………4

三、需求分析…………………………………………….4

四、概要设计……………………………….…………..5

五、详细设计…………………………………….……5

六、测试……………………………………………….….7

七、结论…………………………………………….…..9

八、附录………………………………………….….11

 

 

原创性声明:

本人声明报告者中的内容和程序为本人独立完成,引用他人的文献、数据、图件、资料均已明确标注出。

除标注内容外,不包含任何形式的他人成果,无侵权和抄袭行为,并愿意承担由此而产生后果。

 

作者签字:

时间:

 

指导教师评语:

 

课程成绩:

程序界面(10分)

程序结构和功能(40分)

程序安全和效率(40分)

报告(10分)

 

 

指导教师签字:

时间

 

题目与要求

设计如下类,其功能和部分成员如下:

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 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 Po,即指向基类的指针容器,。

在缺点方面,首先是在继承与派生时对概念弄得不是很清晰,逻辑上出现了一些错误,再加上理解题意出了问题,导致派生关系弄得不对或复杂了,还有就是关于继承类的构造函数没有写好,忽略了关键点,即基类成员和新增成员的使用和关系,还有就是有功能没有实现,像给定一定数量的物品,假设物品的总容量超过容器最大容量,挑选部分装入容器中,设计算法实现所装物品的总价值最大。

程序安全性不足,存在内存泄漏等等,C++课本的教学知识已经学完了,但对于我来说还差得很远很远,光靠这一年的时间是远远不够的,需要更多的知识灌溉和实践,C++之路曼曼其修远兮,吾将上下而求索。

在以后的学习生活中多练习,用勤补拙,不断提高自己的c++水平。

要成为一名合格的程序员还有许多的路要走,我会一直坚持下去!

 

附录

 

*********************************************************

#ifndefPOINT_H

#definePOINT_H

#include

#include

#include""

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=;

m_y=;

m_z=;

}

Point(doublea,doubleb,doublec,doubled);

voidgetPoint();

virtualdoublegetlength(){return0;}

virtualdoublegetarea(){return0;}

virtualdoublegetvolume(){return0;}

virtualvoidmovexyz();

virtualvoidzoom();

virtualvoidprint();

~Point(){}

};

#endif

 

************************************************

#ifndefLINE_H

#defineLINE_H

#include

#include

#include""

usingnamespacestd;

classLine:

virtualpublicPoint{

protected:

doublem_length;

public:

Line():

Point(){

m_length=0;

}

Line(Line&c):

Point(c){

m_length=;

}

Line(doublea,doubleb,doublec,doubled,doublee);

doublegetlength();

doublegetvolume(){return0;}

doublegetarea(){return0;}

voidmovexyz();

voidzoom();

voidprint();

~Line(){}

};

#endif

 

**************************************************

#ifndefCIRCLE_H

#defineCIRCLE_H

#include

#include

#include""

usingnamespacestd;

classCircle:

virtualpublicPoint{

protected:

doublem_R;

public:

Circle():

Point(){

m_R=0;

}

Circle(Circle&c):

Point(c){

m_R=;

}

Circle(doublea,doubleb,doublec,doubled,doublee);

doublegetarea();

doublegetlength(){return0;}

doublegetvolume(){return0;}

voidmovexyz();

voidzoom();

voidprint();

~Circle(){}

};

#endif

 

*****************************************

#ifndefCONTAINER_H

#defineCONTAINER_H

#include

#include

#include""

#include""

#include""

#include""

usingnamespacestd;

 

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;

vectorPo;

public:

voidAddobject();

voidMoveposition();

voidZoominorout();

voidCompare();

voidPrint();

voidDeleteobject();

Point*&operator[](inti);

};

#endif

 

******************************************************

#ifndefCUBE_H

#defineCUBE_H

#include

#include

#include""

usingnamespacestd;

classCube:

publicSquare{

protected:

doublem_High;

public:

Cube();

Cube(doublep,doublex1,doublex2,doublex3,doubler,doublem_High);

Cube(Cube&c):

Square(c){

m_High=;

}

doublegetarea(){return0;}

doublegetlength(){return0;}

doublegetvolume();

voidmovexyz();

voidzoom();

voidprint();

~Cube(){};

};

#endif

 

**********************************************************

#ifndefCUBOID_H

#defineCUBOID_H

#include

#include

#include""

usingnamespacestd;

classCuboid:

publicRectangle{

protected:

doublem_High;

public:

Cuboid();

Cuboid(Cuboid&c):

Rectangle(c){

m_High=;

}

Cuboid(doublep,doublex1,doublex2,doublex3,doubler1,doubler2,doublem_High);

doublegetvolume();

doublegetlength(){return0;}

doublegetarea(){return0;}

voidmovexyz();

voidzoom();

voidprint();

~Cuboid(){};

};

#endif

 

***********************************************

#ifndefCYLINDER_H

#defineCYLINDER_H

#include

#include

#include""

usingnamespacestd;

classCylinder:

publicCircle{

private:

doublem_high;

public:

Cylinder():

Circle(){

m_high=0;

}

Cylinder(Cylinder&c):

Circle(c){

m_high=;

}

Cylinder(doublea,doubleb,doublec,doubled,doublee,doublef);

doublegetvolume();

doublegetlength(){return0;}

doublegetarea(){return0;}

voidmovexyz();

voidzoom();

voidprint();

~Cylinder(){}

};

#endif

 

**********************************************

#ifndefRECTANGLE_H

#defineRECTANGLE_H

#include

#include

#include""

usingnamespacestd;

classRectangle:

publicPoint{

protected:

doubleR1,R2;

public:

Rectangle();

Rectangle(Rectangle&c):

Point(c){

R1=;

R2=;

}

Rectangle(doublep,doublex1,doublex2,doublex3,doubler1,doubler2);

doublegetarea();

doublegetlength(){return0;}

doublegetvolume(){return0;}

voidmovexyz();

voidzoom();

voidprint();

~Rectangle(){};

};

#endif

 

************************************************

#ifndefSQUARE_H

#defineSQUARE_H

#include

#include

#include""

usingnamespacestd;

classSquare:

publicPoint{

protected:

doubleR;

public:

Square();

Square(Square&c):

Point(c){

R=;

}

Square(doublep,doublex1,doublex2,doublex3,doubler);

doublegetarea();

doublegetlength(){return0;}

doublegetvolume(){return0;}

voidmovexyz();

voidzoom();

voidprint();

~Square(){};

};

#endif

 

**************************************************

#ifndefOBJECT_H

#defineOBJECT_H

#include

#include

constdoublePI=;

usingnamespacestd;

classObject{

protected:

doubleProfit;

public:

Object():

Profit(0){}

Object(doublea):

Profit(a){}

~Object(){}

virtualvoidprint()=0;

};

#endif

 

*******************************************

#include""

Point:

:

Point(doublea,doubleb,doublec,doubled):

Object(a),m_x(b),m_y(c),m_z(d){

}

voidPoint:

:

getPoint(){

cout<<"x坐标:

"<

"<

"<

}

voidPoint:

:

movexyz(){

doublea,b,c;

cout<<"请重新输入坐标:

"<

cin>>a>>b>>c;

m_x=a;

m_y=b;

m_z=c;

}

voidPoint:

:

zoom(){

cout<<"点不能放大或缩小"<

}

voidPoint:

:

print(){

cout<<"点:

"<

cout<<"价值:

"<

cout<<"坐标:

"<<"("<

}

 

*************************************************

#include""

Line:

:

Line(doublea,doubleb,doublec,doubled,doublee):

Point(a*e,b,c,d),m_length(e){

};

doubleLine:

:

getlength(){

returnm_length;

}

voidLine:

:

movexyz(){

doublea,b,c;

cout<<"请重新输入中点坐标:

"<

cin>>a>>b>>c;

m_x=a;

m_y=b;

m_z=c;

}

voidLine:

:

zoom(){

cout<<"这是一个线段,请输入你放大或缩小时的倍数"<

doublea;

cin>>a;

m_length=a*m_length;

}

voidLine:

:

print(){

cout<<"线段"<

cout<<"价值:

"<

cout<<"坐标:

"<<"("<

cout<<"长度:

"<

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1