面向对象程序设计报告Word文档格式.docx

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

面向对象程序设计报告Word文档格式.docx

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

面向对象程序设计报告Word文档格式.docx

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

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 

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:

请重新输入中点坐标:

m_

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

当前位置:首页 > 求职职场 > 笔试

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

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