《面向对象程序设计》.doc_第1页
《面向对象程序设计》.doc_第2页
《面向对象程序设计》.doc_第3页
《面向对象程序设计》.doc_第4页
《面向对象程序设计》.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

莁薅膇莈薄螁肃莇蚆蚄罿莆莆衿袅羃蒈蚂螁羂薀袇肀羁芀蚀羆肀莂袆袂聿蒄虿螈肈蚇蒁膆肇莆螇肂肇葿薀羈肆薁螅袄肅芁薈螀肄莃螃聿膃蒅薆羅膂薈螂袁膂莇薄袇膁蒀袀螃膀薂蚃肁腿节袈羇膈莄蚁袃芇蒆袇蝿芆薈虿肈芆芈蒂羄芅蒀蚈羀芄薃薀袆芃节螆螂节莅蕿肁芁蒇螄羇莀蕿薇袃莀艿螃蝿荿莁薅膇莈薄螁肃莇蚆蚄罿莆莆衿袅羃蒈蚂螁羂薀袇肀羁芀蚀羆肀莂袆袂聿蒄虿螈肈蚇蒁膆肇莆螇肂肇葿薀羈肆薁螅袄肅芁薈螀肄莃螃聿膃蒅薆羅膂薈螂袁膂莇薄袇膁蒀袀螃膀薂蚃肁腿节袈羇膈莄蚁袃芇蒆袇蝿芆薈虿肈芆芈蒂羄芅蒀蚈羀芄薃薀袆芃节螆螂节莅蕿肁芁蒇螄羇莀蕿薇袃莀艿螃蝿荿莁薅膇莈薄螁肃莇蚆蚄罿莆莆衿袅羃蒈蚂螁羂薀袇肀羁芀蚀羆肀莂袆袂聿蒄虿螈肈蚇蒁膆肇莆螇肂肇葿薀羈肆薁螅袄肅芁薈螀肄莃螃聿膃蒅薆羅膂薈螂袁膂莇薄袇膁蒀袀螃膀薂蚃肁腿节袈羇膈莄蚁袃芇蒆袇蝿芆薈虿肈芆芈蒂羄芅蒀蚈羀芄薃薀袆芃节螆螂节莅蕿肁芁蒇螄羇莀蕿薇袃莀艿螃蝿荿莁薅膇莈薄螁肃莇蚆蚄罿莆莆衿袅羃蒈蚂螁羂薀袇肀羁芀蚀羆肀莂袆袂聿蒄虿螈 面向对象程序设计实验指导书华中师范大学信息技术系二00九年四月15目 录目 录I概述1实验报告规范1实验报告样例2项目一 类的定义与实现10一实验目标10二实验内容10三实验要求10项目二 类对象成员、静态成员和友元11一实验目标11二实验内容11三实验要求111用两点(端点)表示一条直线段112输出若干个三角形周长的总和,判断2个三角形的面积大小12项目三 继承与虚函数13一实验目标13二实验内容13三实验要求131利用继承实现线段类132计算并输出两个点相加的和、两个复数相加的和14项目四 类的综合应用14一实验目标14二实验内容14三实验要求14项目五 多态性问题的解决方案15一实验目标15二实验内容15三实验要求15概述面向对象程序设计实验课程是是培养学生实践能力的重要课程。通过实践和训练,培养学生编程和动手能力,帮助学生系统掌握面向对象程序设计的主要内容。对于综合项目的设计,可以培养学生分析问题的能力。本课程通过5个目的、内容明确的实验项目,每个项目训练的重点在于基本的面向对象程序设计方法,而不强调面面俱到。每个实验题目提交的成果都是两个部分,一个是实验报告,一个是源程序文件。实验报告以word文档格式提交,源文件以.cpp格式提交。本实验课程的所有实验项目都按照实验报告规范内容所表示的步骤完成,请读者仔细阅读实验报告规范,明确实验的开展所要经历的基本过程。本实验课程的评价按照实验报告规范的各个项目进行评价。实验报告规范每个实验题目写一份实验报告。实验报告规范将给出实验报告的项目和内容。1开头 2分开头第1行给出实验项目号和项目名称,第2行写出实验题目,第3行给出给出班级、学号、姓名和完成日期 2需求分析 20分 以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:(1)程序所能达到的总体功能(2)输入的形式和输入值的范围(3)输出的形式(4)测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果 3模块设计 20分(1)说明本程序中用到的类模块,并给出类模型(2)说明本程序中类与类之间的关系,给出类层次结构图(3)给出其他功能模块的结构模型(4)给出主控模块(对应主函数)的流程4详细设计 20分(1)给出模块设计中各类模块的实现算法(2)给出模块设计中各功能模块的实现算法(3)写出主函数的实现算法 5调试分析 10分(1)调试过程中遇到的问题是如何解决的(2)对设计与实现的回顾、分析、讨论以及经验和体会等6使用说明 8分说明如何使用你编写的程序,详细列出每一步的操作步骤 7测试结果 10分列出你的测试结果,包括输入的内容和格式以及输出的内容和格式。这里的测试数据应该完整和严格,最好多于需求分析中所列。 8附录 10分带注释的源程序。也可以只列出提交的程序文件清单。注意:上述中的第2、3、4这几个部分要在程序设计的过程中逐渐充实形成,而不是最后补写。 实验报告样例实验项目五 多态问题的解决方案题目:在屏幕上为几何图形作图(示意性的)班级 学号 姓名 完成日期 一需求分析1总体功能设计一个可在屏幕上作图的简单程序,要求是不必真正在屏幕上实现作图,只是有一个示意即可。例如:画一个矩形,不必真正画出矩形,只需输出一句话:This is a rectangle !即可。程序要体现继承、多态等面向对象的特性,因此运用语言提供的继承,虚函数等机制。2输入形式与数据类型程序输入的是构造直线、圆和矩形所需要的参数。直线参数形式:颜色(枚举型),端点1,端点2 圆参数的形式:颜色(枚举型),圆心点,半径 矩形参数形式:颜色(枚举型),左上角定位点,右下角定位点上述所有“点”的形式为: 横坐标,纵坐标,纵、横坐标的类型是(int)。3输出形式程序的输出形式为: 提示这是什么图形的字符串 提示显示相应图形的属性值4测试数据两条直线为l1和l2,其中:l1的参数为:红色,(1,1),(250,300) /两端点l2的参数为:白色,(3,5),(100,200) /两端点两个圆为c1和c2,其中:c1的参数为:蓝色,(100,75) /圆心,50 /半径c2的参数为:绿色,(50,200) /圆心 20 /半径两个矩形为r1和r2,其中:r1的参数为:黄色, (10,10)/左上定位点 ,(255,150) /右下定位点r2的参数为:品红色,(20,30) /左上定位点,(100,125) /右下定位点二模块设计1本程序中用到的类模型本程序有如下类:(1)point类属性:直角坐标系的坐标,用x和y表示,类型都为int服务:提供x和提供y,相应函数原型为:int getx();和int gety();(2)Shape类服务:获取枚举颜色,相应的函数原型为:void GetColor( ColorType c); 绘图,相应的函数原型为:virtual void Draw()=0;(3)Line类属性:线段的起点start,线段的终点end,类型为point 颜色color,类型为枚举型ColorType服务:绘图,相应的函数原型为:virtual void Draw();(4)Rectangle类属性:左上角定位点upperleft,右上角定位点lowerright,点的类型均为point 颜色color,类型为枚举型ColorType服务:绘图,相应的函数原型为:virtual void Draw();(5)Circle类属性:圆心点center,类型为point;半径radius,类型为int 颜色color,类型为枚举型ColorType服务:绘图,相应的函数原型为:virtual void Draw();(6)Picture类 /这是一个多态类这个类是用来绘制图形的。属性:基类指针数组,可以指向基类的派生类对象服务:启动绘制功能,相应的函数原型为:void paint();该服务可以根据基类的不同派生类对象启动相应的图形绘制功能。2本程序中类与类之间的关系,给出类层次结构图(1)point类与Line类、Rectangle类和Circle类之间是部分整体关系(2)Shape类与Line类、Rectangle类和Circle类之间是一般特殊关系(3)类层次结构如图1所示: Shape Shape ShapeLineRectangle类Circle图1 类层次结构图构造两条红、白直线构造两个圆构造两个矩形绘图3main函数的流程 三详细设计1给出模块设计中各类模块的实现算法(1)point类的定义与实现class point int x,y; public: point() x=0;y=0;point(int x_pos,int y_pos) x=x_pos;y=y_pos; point(const Point &p) x=p.x; y=p.y; int getx() return x; int gety() return y; ;/这是一个枚举,white至cyan分别代/表了0至7的值enum ColorTypeWhite,Black,Red,Green,Blue,Yellow,Magenta,Cyan;(2)Shape类的定义与实现class Shapeprotected: void GetColor( ColorType c) switch(c) case White : cout “White”endl;break; case Black : cout “Black”endl; break; case Red : cout “Red”endl; break; case Green: cout “Green”endl; break; case Blue: cout “Blue”endl; break; case Yellow: cout “Yellow”endl; break; case Magenta: cout “Magenta”endl; break; case Cyan: cout “Cyan”endl;public:virtual void Draw()=0; ;(3)Line类的定义与实现class Line:public Shape point start,end;ColorType color;public: Line(ColorType c,int x1,int y1,int x2,int y2): start(x1, y1), end(x2, y2) ColorType=c;virtual void Draw()coutThis is a line!endl; coutThe Color is :; GetColor( color);coutIts start point is (start.getx(),start.gety()。endl;coutIts end point is (end.getx(),end.gety()。endl;/这里可以加一些别的语句 ;(4)Rectangle类的定义与实现class Rectangle:public Shapepoint upperleft;point lowerright;public:Rectangle(ColorType c, int x1,int y1,int x2,int y2): upperleft(x1, y1), lowerright(x2, y2)virtual void Draw()coutThis is a rectangle!endl;coutThe Color is :; GetColor( color); coutIts upperleft point is (upperleft.getx(),upperleft.gety() )。endl; coutIts lowerright point is ( lowerright.getx(),lowerright.gety() )。endl;/ 其他语句。 ; (5)Circle类的定义与实现class Circle:public Shapepoint center; /圆心int radius; /半径public:Circle(ColorType c,int x,int y,int rad): center(x,y) radius=rad; virtual void Draw() coutThis is a circle!endl; coutThe Color is :; GetColor( color);coutIts center is (center.getx(),center.gety()。endl;coutIts radius is radius。endl;/其他语句 ;(6)Picture类的定义与实现 /用来绘制图形class Picture private:Shape *s6;public:Picture(Shape* s1, Shape* s2 Shape* s3,Shape* s4, Shape* s5 Shape* s6) s0=s1;s1=s2;s2=s3; s3=s4;s4=s5;s5=s6; void paint() for(int i=0;iDraw(); /多态模块;2写出主函数的实现void main()/构造两条红、白直线Line l1(Red, 1,1, 250,300);Line l1(White, 3,5,100,200);/构造两个圆Circle c1(Blue, 100,75,50);Circle c2(Green, 50,200,20);/构造两个矩形Rectangle r1(Yellow, 10,10, 255,150);Rectangle r2(Magenta, 20,30, 100,125);/绘图Picture p(&l1,&l2,&c1,&c2,&r1,&r2);p.paint();四调试分析在程序的调试中,主要出现的是语法错误,都是由于粗心造成的,整体来说调试是比较顺利的。由于编写程序前进行了比较规范的设计,使得程序在逻辑上没有出现错误,所以当语法错误修改后,程序的运行就按设计的方案得到了正确结果。通过这次实验深切体会到规范进行设计的重要性。不过程序的不足之处是数据都使用的常数,程序没有数据的适应性,这在今后的设计中要考虑。五使用说明本程序使用的固定数据,程序只要发运行命令即可。程序运行后直接出结果。六测试结果This is a line!The Color is :RedIts start point is (1,1)。Its end point is (250,300)。This is a line!The Color is :WhiteIts start point is (3,5)。Its end point is (100,200)。This is a circle!The Color is : BlueIts center is (100,75)。Its radius is 50。This is a circle!The Color is : GreenIts center is (50,200)。Its radius is 20。This is a rectangle!The Color is : YellowIts upperleft point is (10,10)。Its lowerright point is (255,150)。This is a rectangle!The Color is : MagentaIts upperleft point is (20,30)。Its lowerright point is (100,125)。七附录实验源代码:/定义point类#include #include #include class point int x,y; public: point() x=0;y=0;point(int x_pos,int y_pos) x=x_pos;y=y_pos; point(const Point &p) x=p.x; y=p.y; int getx() return x; int gety() return y; ;/这是一个枚举,white至cyan分别代/表了0至7的值enum ColorTypeWhite,Black,Red,Green,Blue,Yellow,Magenta,Cyan;/为图形形状定义Shape基类class Shapeprotected: void GetColor( ColorType c) switch(c) case White : cout “White”endl;break; case Black : cout “Black”endl; break; case Red : cout “Red”endl; break; case Green: cout “Green”endl; break; case Blue: cout “Blue”endl; break; case Yellow: cout “Yellow”endl; break; case Magenta: cout “Magenta”endl; break; case Cyan: cout “Cyan”endl;public:virtual void Draw()=0; ;/从Shape类派生一个直线line类:class Line:public Shape point start,end;ColorType color;public: Line(ColorType c,int x1,int y1,int x2,int y2): start(x1, y1), end(x2, y2) ColorType=c;virtual void Draw()coutThis is a line!endl; coutThe Color is :; GetColor( color);coutIts start point is (start.getx(),start.gety()。endl;coutIts end point is (end.getx(),end.gety()。endl;/这里可以加一些别的语句 ;/从Shape类派生一个直线Rectangle类:class Rectangle:public Shapepoint upperleft;point lowerright;public:Rectangle(ColorType c, int x1,int y1,int x2,int y2): upperleft(x1, y1), lowerright(x2, y2)virtual void Draw()coutThis is a rectangle!endl;coutThe Color is :; GetColor( color); coutIts upperleft point is (upperleft.getx(),upperleft.gety() )。endl; coutIts lowerright point is ( lowerright.getx(),lowerright.gety() )。endl;/ 其他语句。 ; /从Shape类派生一个直线Circle类:class Circle:public Shapepoint center; /圆心int radius; /半径public:Circle(ColorType c,int x,int y,int rad): center(x,y) radius=rad; virtual void Draw() coutThis is a circle!endl; coutThe Color is :; GetColor( color);coutIts center is (center.getx(),center.gety()。endl;coutIts radius is radius。endl;/其他语句 ;/最后设计一个Picture类,用来绘制这些图形class Picture private:Shape *s6;public:Picture(Shape* s1, Shape* s2 Shape* s3,Shape* s4, Shape* s5 Shape* s6) s0=s1;s1=s2;s2=s3; s3=s4;s4=s5;s5=s6; void paint() for(int i=0;iDraw(); ;void main()/构造两条红、白直线Line l1(Red, 1,1, 250,300);Line l1(White, 3,5,100,200);/构造两个圆Circle c1(Blue, 100,75,50);Circle c2(Green, 50,200,20);/构造两个矩形Rectangle r1(Yellow, 10,10, 255,150);Rectangle r2(Magenta, 20,30, 100,125);/绘图Picture p(&l1,&l2,&c1,&c2,&r1,&r2);p.paint();项目一 类的定义与实现一实验目标能够定义和实现给定的类模型二实验内容设计并测试一个名为Rectangle的矩形类三实验要求问题描述: Rectangle类的模型如下:属性:左上角坐标:X,Y; 矩形的宽和高:W,H。 服务:移动位置(Move) 设置宽和高(SetSize) 提供高和宽数据(GetH和GetW) 查询位置(Where) 计算面积(Area)用语言提供的类机制定义、实现该类,并对该类提供的服务进行测试。基本要求: 1编写程序,定义两个矩形,从键盘输入它们的属性,并输出这两个矩形2在程序中,将定义的两个矩形分别移动位置,位置信息从键盘输入,并显示移动后的位置3在程序中,改变这两个矩形的大小,大小信息通过键盘输入,并能显示改变后大小4在程序中,分别计算初始状态时两个矩形的面积以及修改大小后的面积,计算后输出5在程序中,无论输入还是输出,要给出适当的提示信息 测试数据: 1定义的两个矩形为or1和or2,or1的X和Y为(10,20),W和H为3和4;or2的X和Y为(20,30),W和H为5和62移动的位置信息分别为:or1移到 (15,25);or2 移到(35,45)3大小改变的信息分别为:or1改为(w1,h1);or2改为 (w2,h2)实现提示: 1程序运行后,首先提示构造两个矩形对象和输入矩形对象的属性数据,然后输出这两个矩形对象(包括大小和位置信息)2提示计算两个矩形的面积,并输出3提示移动两个矩形的位置并输入新的位置信息,然后显示矩形的新位置信息4提示改变两个矩形的大小并输入新的大小信息,然后显示矩形的新大小信息5提示计算改变大小之后两个矩形的面积,并输出项目二 类对象成员、静态成员和友元一实验目标能够正确定义和操作类对象成员、静态成员和友元。二实验内容1用两点(端点)表示一条直线段2输出若干个三角形周长的总和,判断2个三角形的面积大小三实验要求1用两点(端点)表示一条直线段问题描述:一条线段可以用两个点来表示,从面向对象程序设计的角度看,点是线段的组成部分,于是,点类和线段类之间形成部分整体关系。本题目的问题就是如何通过实现部分整体关系来实现和操作线段类。基本要求:1自行设计线段类,用两个点对象作为线段的属性2编写程序,定义两条线段,从键盘输入它们的端点信息,并输出这两条线段,输出形式为:L1:(a1,b1),(a2,b2) L2:(c1,d1),(c2,d2)(其中:a1,b1,a2,b2是L1两端点的坐标值;a1,b1,a2,b2是L2两端点的坐标值)3在程序中,显示这两条线段的长度4在程序中,改变这两条线段的长度,改变线段的有关信息从键盘输入,该信息是在原有长度的基础上增加一个增量t并显示改变后的线段长度和线段5在程序中,无论输入还是输出,要给出适当的提示信息测试数据:1定义的两条线段为L1和L2。L1:(19,75),(11,12)L2:(86,19),(25,01)2改变两条线段的长度增量t=10实现提示:1程序运行后,首先提示构造两线段和输入线段的属性数据,然后输出这两条线段2提示输出这两条线段的长度3提示改变两条线段的长度并输入长度改变的增量值4提示输出改变后的线段长度以及相应的线段2输出若干个三角形周长的总和,判断2个三角形的面积大小问题描述: 一个数据的值如果是通过操作类对象属性而得到的,则这种数据通常必须和对象的生存期相联系。这种数据可以认为是同类的对象共同维护和享用的数据,它既要受到相应类的保护又不能成为类的成员,这就是c+里的静态数据成员。类的封装特性有时对于程序运行而言不是一个好的特性,因为它会影响程序的运行效率,于是,c+提供了能够在需要时,局部打破封装的机制友元。本题目的问题是,如何利用静态成员机制,求得若干个三角形周长的总和以及如何利用友元,使三角形的用户面积判断模块能访问三角形的私有成员。基本要求: 1自行设计三角形类模型,确定属性和服务2编写程序,定义若干个三角形,从键盘输入与它们的属性有关的数据,并输出这些三角形。三角形的数据成员是由学生在设计三角形类模型时确定,但用户输入的数据是三角形的三边信息,程序中要能判断输入数据的合法性3在程序中,计算并输出这些个三角形周长的总和S,S要与相应个数的三角形的生存期保持一致4在程序中,判断这些三角形其中的2个的面积大小,并输出判断结果。结果用如下形式: 三角形1 或者 或者 三角形2“判断两个三角形类对象的面积大小”的工作由调用相应普通函数fun来完成,且该函数中能直接使用三角形的相应私有数据成员5在程序中,无论输入还是输出,要给出适当的提示信息测试数据: 1三角形的个数定为3个:ot1,ot2和ot32三个三角形的三边数据分别为: ot1:3,4,5 ot2:6,7,8 ot3:2,8,12实现提示: 1程序运行后,首先提示构造若干个三角形和输入三角形的三边数据,对于不合法的数据给出相应的提示,并能重新输入,然后输出这些三角形2提示输出这些三角形周长的总和3提示进行其中两个三角形的面积判断,并输出判断结果项目三 继承与虚函数一实验目标能够用合适的继承方式实现继承关系;能够正确设置和使用虚函数。二实验内容1利用继承实现线段类2应用虚函数计算并输出圆形、三角形和矩形等几何图形的面积。 三实验要求1利用继承实现线段类问题描述: 在实验项目二中,通过部分整体关系,实现了由点对象组成的线段。继承,可以利用已有的类实现新的类,这样可以实现代码重用。由于线段类的实现很多时候要用到点类的属性和操作,于是,本题目的问题就是要通过继承来实现线段类。基本要求: 1自行设计线段类模型,确定属性和服务,确定和点类的关系2编写程序,定义两条线段,从键盘输入它们的端点信息,并输出这两条线段,输出形式为:L1:(a1,b1),(a2,b2) L2:(c1,d1),(c2,d2)(其中:a1,b1,a2,b2是L1两端点的坐标值;a1,b1,a2,b2是L2两端点的坐标值)3在程序中,显示这两条线段的长度4在程序中,改变这两条线段的长度,改变线段的有关信息从键盘输入,该信息是在原有长度的基础上增加一个增量t并显示改变后的线段长度和线段5在程序中,无论输入还是输出,要给出适当的提示信息测试数据:1定义的两条线段为L1和L2。L1:(19,75),(11,12)L2:(86,19),(25,01)2改变两条线段的长度增量t=10实现提示:1程序运行后,首先提示构造两线段和输入线段的属性数据,然后输出这两条线段2提示输出这两条线段的长度3提示改变两条线段的长度并输入长度改变的增量值4提示输出改变后的线段长度以及相应的线段2计算并输出两个点相加的和、两个复数相加的和问题描述: 虚函数是实现多态模块的重要前提。本题目的问题就是要实现一个多态模块,这个多态模块的功能就是既能计算并输出两个点相加的和,也能计算并输出两个复数相加的和基本要求: 1自行设计复数类,如果需要适当改造点类以及确定多态模块所需的抽象类2编写程序,从键盘输入两个点的初始化需要的数据和两个复数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论