版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 类与对象一实验目的本实验的目的是使学生了解基本的面向对象程序设计方法,掌握面向对象程序的工作原理,面向对象程序的调试方法。掌握类的概念和定义方式,掌握对象的定义方式、访问方式以及与对象相关的概念及使用方法。二实验环境Visual C+ 6.0 及以上版本。 三预习要求熟悉掌握类和对象的基本概念及相关知识。根据老师布置的实验题目,提前分析题目要求所需要的类,设计好解决题目要求需要的对象个数,设计解决问题需要的主函数等。题目可以从以下题目中选择一个。1定义一个学生类Student,学生类中有3个私有数据成员:name(姓名)、cls(班级)、grade(年级);3个公有成员函数;Stude
2、nt(构造函数)、display、Student(析构函数)。使用构造函数为Student类的对象赋值(name使用动态内存分配空间),display负责显示学生的基本信息,在析构函数中释放动态分配的内存。2设计一个点类Point,编写一个求两点距离的计算器。3设计一个正整数字符串转换器,要求先设计一个类IntToStr,将任意一个正整数转换成相应的字符串。例如正整数12345转换成字符串“12345”。4其它和本实验目的相符的题目,根据学生实际情况增加相应的题目,但题目难度不应低于以上三个题目。注意:从以上题目中选择一个作为实验题目。四实验原理1.按照题目要求分析解决问题需要的类;2.进行类
3、的设计并实现;3.分析解决问题需要定义的对象及对象间的消息传递关系;4.设计主函数实现题目要求。五实验内容利用Visual C+6.0调试事先设计好的程序,注意观察调试过程中出现的问题,并解决这些问题完成实验题目的要求。class Studentprivate:char *name;int cla;char *grade;public:Student(char *stuname,int stuclass,char*stugrade);void display();Student();#include#includeStudent.husing namespace std;Student:Stu
4、dent(char *stuname,int stuclass,char *stugrade) int length=strlen(stuname);name=new charlength+1;if(name!=0)strcpy(name,stuname);cla=stuclass; int lenth=strlen(stugrade);grade=new charlenth+1;if(grade!=0)strcpy(grade,stugrade);/cout创建对象成功!endl;void Student:display()cout姓名:nameendl;cout班级:claendl;cou
5、t年级:gradeendl;Student:Student()delete name; / coutendl;delete grade;/coutendl;/cout析构成功endl;#include#includeStudent.husing namespace std;int main()Student student(瑞奇,3,计算机科学与技术);student.display();return 0;六思考题1.成员函数的工作原理;2.构造函数的调用;3.析构函数的调用。七实验报告要求要求叙述实验目的、实验所需的条件与工具、实验内容与实验的完成情况。重点记录实验中出现的问题、对出现问题原
6、因的分析及解决办法等。实验二 继承与派生一实验目的本实验的目的是使学生了解类的继承与派生过程,掌握用类的继承的方法实现程序设计目标的方法。掌握类的继承与派生的概念、派生类的定义方式、基类成员在派生类中的访问控制等。二实验环境Visual C+ 6.0 及以上版本。 三预习要求熟悉掌握类的继承和派生的相关知识。根据老师布置的实验题目,提前分析题目要求所需要的类,设计好解决题目要求需要的对象个数,设计解决问题需要的主函数等。题目可以从以下题目中选择一个。1定义一个学生类Student,类中包含3个私有数据成员:name(姓名)、sex(性别)、score(成绩)。用公有继承方式声明一个研究生类Gr
7、aduate,该类中添加一个数据成员advisor(导师),并添加一个成员函数display来显示这些内容。2编写一个学生和教师数据输入和显示程序。其中,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类Person;然后设计类Person的派生类:学生类Student和教师类Teacher;编写一个主函数,通过定义student、teacher的对象,完成相应功能。3其它和本实验目的相符的题目,根据学生实际情况增加相应的题目,但题目难度不应低于以上两个题目。注意:注意:从以上题目中选择一个作为实验题目。四实验原理1.按照题目要求分析解决
8、问题需要的类;2.进行类的设计并实现;3.分析解决问题需要定义的对象及对象间的消息传递关系;4.设计主函数实现题目要求。五实验内容利用Visual C+6.0调试事先设计好的程序,注意观察调试过程中出现的问题,并解决这些问题完成实验题目的要求。class Studentprivate:char name20;char sex;float score;public:Student(char *a,char b,float c):sex(b),score(c)strcpy(name,a);void display();class Graduate:public Studentprivate: ch
9、ar advisor20;public:Graduate(char* a,char b,float c,char* d):Student(a,b,c)strcpy(advisor,d);void show();#include#include#includeStudent.h#includeGraduate.husing namespace std;void Student:display()cout姓名:nameendl;cout性别:sexendl;cout分数:scoreendl;void Graduate:show()display();cout导师是:advisorendl;#inc
10、lude#include#includeStudent.h#includeGraduate.husing namespace std;int main()Graduate A(张三,M,93.5,李勇);A.show();return 0;六思考题1. 基类和派生类的构造顺序;2. 基类和派生类的析构顺序。七实验报告要求要求叙述实验目的、实验所需的条件与工具、实验内容与实验的完成情况。重点记录实验中出现的问题、对出现问题原因的分析及解决办法等。实验三 多态性一实验目的本实验的目的是使学生了虚函数的作用,掌握多态的概念、编译时多态、运行时多态,掌握运算符重载和虚函数的用法。二实验环境Visual
11、 C+ 6.0 及以上版本。 三预习要求熟悉掌握C+多态的相关知识。根据老师布置的实验题目,提前分析题目要求所需要的类,设计好解决题目要求需要的对象个数,设计解决问题需要的主函数等。题目可以从以下题目中选择一个。1定义一个实数类Real,类中包括一个数据成员real,构造函数、display()函数以及重载的+、-、*、/运算符。用公有继承方式声明一个复数类Complex,该类包括两个数据成员real,image,并重载Real类的函数和+、-、*、/运算符。编写一个复数四则运算计算器。2.Shape是一个几何图形的基类,它至少有求自身周长函数Circumference()和求自身面积函数Ar
12、ea()。从Shape类派生出Circle类、Ellipse类、Triangle类和Rectangle类,分别继承基类Shape的Circumference()和Area(),并增加新的成员。编写主函数,定义各派生类对象,求多派生类对象的周长之和、面积之和。3其它和本实验目的相符的题目,根据学生实际情况增加相应的题目,但题目难度不应低于以上两个题目。注意:注意:从以上题目中选择一个作为实验题目。四实验原理1.按照题目要求分析解决问题需要的类;2.进行类的设计并实现;3.分析解决问题需要定义的对象及对象间的消息传递关系;4.设计主函数实现题目要求。五实验内容利用Visual C+6.0调试事先设
13、计好的程序,注意观察调试过程中出现的问题,并解决这些问题完成实验题目的要求。#include#define PI 3.1415926using namespace std;class Shapepublic:virtual double Circuference()=0;virtual double Area()=0;virtualvoid display()=0;/定义基类class Circle:public Shapeprivate:double r;public:Circle(double R=0) r=R;double Circuference()return 2*r*PI;doub
14、le Area()return r*r*PI;void display()cout圆的周长为:Circuference()endl圆的面积为:Area()endl;/class Ellipse:public Shapeprivate:double a;double b;public:Ellipse(double A=0,double B=0)a=A;b=B;double Circuference()return 2*PI*b+4*(a-b);double Area()return PI*a*b;void display()cout椭圆的周长为:Circuference()endl椭圆的面积为:
15、Area()endl;/class Triangle:public Shapeprivate:double high1,high2,high3;public:Triangle(double High1=0,double High2=0,double High3=0)high1=High1;high2=High2;high3=High3;double Circuference()return high1+high2+high3;double Area()double a=high1+high2+high3;return a*(a-high1)*(a-high2)*(a-high3);void d
16、isplay()cout三角形的周长为:Circuference()endl三角形的面积为:Area()endl;/class Rectangle:public Shapeprivate:double length;double width;public:Rectangle(double Length,double Width)length=Length;width=Width;double Circuference()return 2*length*width;double Area()return length*width;void display()cout矩形的周长为:Circufer
17、ence()endl矩形的面积为:Area()endl;int main()Shape *S4;Circle c(4);Ellipse e(2,3);Triangle t(3,4,5);Rectangle r(3,4);S0=&c;S1=&e;S2=&t;S3=&r;int i;for(i=0;idisplay(); /*S1-display();S2-display();S3-display();S4-display();cout四个图形的周长之和为:Circuference()+S2-Circuference()+S3-Circuference()+S4-Circuference()end
18、l;cout四个图形的面积之和为:Area()+S2-Area()+S3-Area()+S4-Area()endl;*/double circuference=0,area=0;for (i=0;iCircuference();area=area+Si-Area(); cout四个图形的周长之和为:circuferenceendl;cout四个图形的面积之和为:areaendl;return 0;六思考题1. 基类指针指向派生类对象与派生类指针指向基类对象的区别;2. 虚函数的作用。七实验报告要求要求叙述实验目的、实验所需的条件与工具、实验内容与实验的完成情况。重点记录实验中出现的问题、对出现
19、问题原因的分析及解决办法等。实验四 面向对象综合应用一实验目的掌握面向对象程序设计方法在实际中的应用。二实验环境Visual C+ 6.0 及以上版本。 三预习要求熟悉掌握C+多态的相关知识。根据老师布置的实验题目,提前分析题目要求所需要的类,设计好解决题目要求需要的对象个数,设计解决问题需要的主函数等。题目可以从以下题目中选择一个。1以现实生活中的电梯为原型,进行需求调查,了解电梯的各个功能。抽象出电梯类,设计电梯类的成员函数和数据成员,完成电梯类的完整定义及实现。编写应用程序,使用电梯类,比较仿真程序与现实中电梯运行状况的异同。2以现实生活中的DVD为原型,进行需求调查,了解DVD的各个功
20、能。抽象出DVD类DVD,设计DVD类的成员函数和数据成员,完成DVD类的完整定义及实现。编写应用程序,使用DVD类,比较仿真程序与现实中DVD运行状况的异同。3以现实生活中的MP3为原型,进行需求调查,了解MP3的各个功能。抽象出MP3类MP3,设计MP3类的成员函数和数据成员,完成MP3类的完整定义及实现。编写应用程序,使用MP3类,比较仿真程序与现实中MP3运行状况的异同。4其它和本实验目的相符的题目,根据学生实际情况增加相应的题目,但题目难度不应低于以上两个题目。注意:注意:从以上题目中选择一个作为实验题目。四实验原理1.按照题目要求分析解决问题需要的类;2.进行类的设计并实现;3.分
21、析解决问题需要定义的对象及对象间的消息传递关系;4.设计主函数实现题目要求。五实验内容利用Visual C+6.0调试事先设计好的程序,注意观察调试过程中出现的问题,并解决这些问题完成实验题目的要求。#ifndef CELEVATOR_H#define CELEVATOR_Hconst int MostLayers = 100;class CElevatorpublic:CElevator();/构造函数CElevator(int uLayers, int lLayers);/构造函数CElevator(CElevator &myElevator);/拷贝构造函数 void PressOute
22、rButton(int direction, int floor);/电梯外部各楼层操作按钮void PressInnerDigitalButton(int floor);/电梯内部数字按钮void PressOpen_CloseButton(int operate);/电梯内部开合控制按钮void PressAlert();/电梯内部报警按钮void run();/电梯运行CElevator();/析构函数protected:void OpenElevator();/打开电梯void CloseElevator();/关闭电梯void UserOperate();/由于程序单线程运行,因此将
23、用户的所有操作集中在每一层停止的时候完成。const int UpperLayers; /电梯最高能到达的楼层const int LowerLayers; /电梯最低能到达的楼层int States5; /电梯当前状态,States0表示运行或停止,0停止,1运行,初值0;States1表示当前所在楼层,初值1;States2表示运行方向,向上0,向下1,初值0;States3表示开合,0开,0合,初值1;States4表示是否故障,0正常,1故障,初值1int DigitalButtonMostLayers;/整形数组,i为楼层且i!=0,i0,iLowerLayers-1表示电梯内地上i楼
24、层按钮是否被按下,0未按,1按下int OuterDownButtonMostLayers;/整形数组,i为楼层且i!=0,i0,iLowerLayers-1表示电梯外i层向下按钮是否被按下,0未按,1按下int OuterUpButtonMostLayers;/整形数组,i为楼层且i!=0,i0,iLowerLayers-1表示电梯外i层向上按钮是否被按下,0未按,1按下;#endif#include#include CElevator.husing namespace std;CElevator:CElevator():UpperLayers(10),LowerLayers(1)State
25、s0 = 0; /初始状态为停止States1 = 1;/初始楼层在楼States2 = 0;/初始方向为向上States3 = 1;/初始电梯为合States4 = 0;/初始电梯正常for(int i=0;iMostLayers;i+)DigitalButtoni = 0; OuterDownButtoni = 0; OuterUpButtoni = 0;CElevator:CElevator(int uLayers, int lLayers):UpperLayers(uLayers),LowerLayers(lLayers)States0 = 0; /初始状态为停止States1 = 1
26、;/初始楼层在楼States2 = 0;/初始方向为向上States3 = 1;/初始电梯为合States4 = 0;/初始电梯正常for(int i=0;iMostLayers;i+)DigitalButtoni = 0; OuterDownButtoni = 0; OuterUpButtoni = 0;CElevator:CElevator(CElevator &myElevator):UpperLayers(myElevator.UpperLayers),LowerLayers( myElevator.LowerLayers)States0 = myElevator.States0; S
27、tates1 = myElevator.States1;States2 = myElevator.States2;States3 = myElevator.States3;States4 = myElevator.States5;for(int i=0;iMostLayers;i+)DigitalButtoni = myElevator.DigitalButtoni;OuterDownButtoni = myElevator.DigitalButtoni;OuterUpButtoni = myElevator.DigitalButtoni;CElevator:CElevator()void C
28、Elevator:PressOuterButton(int direction, int floor) if(direction=0)OuterUpButtonfloor-LowerLayers-1 = 1;elseOuterDownButtonfloor-LowerLayers-1 = 1;void CElevator:PressInnerDigitalButton(int floor)DigitalButtonfloor-LowerLayers-1 = 1;void CElevator:PressOpen_CloseButton(int operate)if(operate = 0)/打开
29、电梯 OpenElevator();else/关闭电梯CloseElevator();void CElevator:OpenElevator()if(States3 = 0)cout电梯已打开,请先出后进!endlendl;else cout电梯正在打开 电梯已打开,请先出后进!endlendl; States3 = 0;void CElevator:CloseElevator() if(States3 = 1)cout电梯已关闭,请保持安静!endlendl;else cout电梯正在关闭 电梯已关闭,请保持安静!endlendl;States3 = 1;void CElevator:Pre
30、ssAlert()cout电梯内部有人报警,请援助!endl;States4 = 1;void CElevator:UserOperate()/按报警按钮int alm = 0;coutalm;coutendl;if(alm=1)States4 = 1;while(States4=1)coutalm;coutendl;if(alm = 0 | alm =1)States4 = alm;elsecout维修数据不正确!endl;OpenElevator();/电梯内部输入到达楼层cout请电梯内乘客输入所要到达的楼层!endl;coutfloor;if(floor=0)break;if(floo
31、r=LowerLayers) & (floor=UpperLayers) & (floor!=States1)if(floor0)/地下 DigitalButtonfloor-LowerLayers = 1;else/地上DigitalButtonfloor-LowerLayers-1 = 1;/没有楼coutendl; /电梯外部各楼层输入上楼信号cout请电梯外部乘客输入上楼信号!endl;coutfloor;if(floor=0)break;elseif(floor=LowerLayers) & (floorUpperLayers) & (floor!=States1)if(floor0
32、)/地下OuterUpButtonfloor-LowerLayers = 1;else/地上OuterUpButtonfloor-LowerLayers-1 = 1;/没有楼coutendl;/电梯外部各楼层输入下楼信号cout请电梯外部乘客输入下楼信号,endl;coutfloor;if(floor=0)break;elseif(floorLowerLayers) & (floor=UpperLayers) & (floor!=States1)if(floor0)/地下OuterDownButtonfloor-LowerLayers = 1;else/地上OuterDownButtonflo
33、or-LowerLayers-1 = 1;/没有楼coutendl;/按开电梯按钮int direction = 0;cout电梯将要关闭,等人请按打开按钮!endl;coutdirection;coutendl;if(direction=1)OpenElevator(); for(int i=0;i50;i+);/延时CloseElevator();/按关电梯按钮coutdirection;coutendl;if(direction=0)for(int i=0;i50;i+);/延时CloseElevator();elseCloseElevator();void CElevator:run(
34、)while(true)if(States0=0)cout电梯停在States1层!endl;if(States2=0)/向上if(States10)/地下OuterUpButtonStates1-LowerLayers = 0;/将记录电梯States1层有向上的标志取消DigitalButtonStates1-LowerLayers = 0;/将记录电梯在States1层停靠的标志取消else/地上OuterUpButtonStates1-LowerLayers-1 = 0;/将记录电梯States1层有向上的标志取消DigitalButtonStates1-LowerLayers-1 =
35、 0;/将记录电梯在States1层停靠的标志取消else/向下if(States10)/地下OuterDownButtonStates1-LowerLayers = 0;/将记录电梯States1层有向下的标志取消DigitalButtonStates1-LowerLayers = 0;/将记录电梯在States1层停靠的标志取消else/地上OuterDownButtonStates1-LowerLayers-1 = 0;/将记录电梯States1层有向下的标志取消DigitalButtonStates1-LowerLayers-1 = 0;/将记录电梯在States1层停靠的标志取消if
36、(States1=1)couttemp;if(temp=1)exit(0);coutendl; UserOperate();States0 = 1;elseif(States2=0)/向上States1+;if(States1=0)States1+;/没有层elsecout电梯向上运行,将要到达States1层!endlendl;if(States1=UpperLayers)/向上到最顶,必定要停,且方向变为向下States2 = 1;/变方向 States0 = 0;elseif(OuterUpButtonStates1-LowerLayers-1=0 & DigitalButtonStat
37、es1-LowerLayers-1=0)cout没有乘客在States1层上下,电梯继续向上运行!endlendl;elseStates0 = 0;else/向下States1-;if(States1=0)States1 = -1;/没有层elsecout电梯向下运行,将要到达States1层!endlendl;if(States1=LowerLayers)/向下到最底,必定要停,且方向变为向上States2 = 0;/变方向 States0 = 0;elseif(OuterDownButtonStates1-LowerLayers-1=0 & DigitalButtonStates1-Low
38、erLayers-1=0)cout没有乘客在States1层上下,电梯继续向下运行!endlendl;elseStates0 = 0;#include #include CElevator.husing namespace std;#include CElevator.hvoid main()CElevator myElevator(8,-3);myElevator.run();六设计方案下面给出题目1(电梯仿真)的3中设计方案,从方案1到方案3越来越详细,学生可以从方案1开始,如果觉得有难度,再参考方案2,以此类推。方案11功能要求(需求分析)以现实生活中的电梯为原型,进行需求调查,了解电梯
39、的各个功能。2类设计根据第一步中获得的电梯运行情况,抽象电梯类(CElevator),设计CElevator的成员函数和数据成员,完成CElevator类的完整定义及实现。3应用编写应用程序,使用电梯类,比较仿真程序与现实中电梯运行状况的异同。4其它说明 如果采用“Windows控制台应用程序”设计仿真程序,其运行状况必定会和现实有所差异,因为现实中多种情况是并发发生的,如电梯内、电梯外各楼层会有人同时按按钮。而控制台程序一个时刻只能一件事情发生。因此需要对电梯运行情况进行合理简化。 如果采用“MFC应用程序”等具有并发或多线程的程序设计模式,将会和现实情况比较类似,但还会有所不同,也要进行合
40、理简化。方案二1功能要求(需求分析)以现实生活中的电梯为原型,进行需求调查,了解电梯的各个功能。2类设计根据第一步中获得的电梯运行情况,抽象电梯类(CElevator),设计CElevator类的成员函数和数据成员,完成CElevator类的完整定义及实现。(1)成员函数 构造函数CElevator(int uLayers, int lLayers);/参数个数自定 电梯外部候梯按钮操作PressOuterButton,函数自行定义 电梯内部数字按键操作PressInnerDigitalButton,函数自行定义 电梯内部开合控制操作PressOpen_CloseButton,函数自行定义 电
41、梯内部报警操作PressAlert,函数自行定义 电梯运行run,函数自行定义(2)数据成员 电梯最高能到达的楼层,UpperLayers; /电梯最高能到达的楼层 电梯最低能到达的楼层LowerLayers; /电梯最低能到达的楼层 电梯状态States5; /运行或停止;当前所在楼层;运行方向;开合;是否故障 DigitalButtonMostLayers;/整形数组,记录电梯内i楼层是否被按下 OuterDownButtonMostLayers;/整形数组,记录电梯外i楼层向下按钮是否被按下 OuterUpButtonMostLayers;/整形数组,记录电梯外i楼层向上按钮是否被按下 MostLayers为常数3应用编写应用程序,使用电梯类,比较仿真程序与现实中电梯运行状况的异同。4其它说明 如果采用“Windows控制台应用程序”设计仿真程序,其运行状况必定会和现实有所差异,因为现实中多种情况是并发发生的,如电梯内、电梯外各楼层会有人同时按按钮。而控制台程序一个时刻只能一件事情发生。因此需要对电梯运行情况进行合理简化。 如果采用“MFC应用程序”等具有并发或多线程的程序设计模式,将会和现实情况比较类似,但还会有所不同,也要进行合理简化。方案三1功能要求(需求分析)以现实生活中的电梯为原型,进行需求调查,了解电梯的各
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电玩城充值制度规范要求
- 充电工具管理制度规范
- 严格规范值班值守制度
- 家政服务企业制度规范
- 异地停车制度规范标准
- 吊具管理制度规范标准
- 幼儿园规范化评估制度
- 除臭剂喷洒制度规范标准
- 保险相关规范制度汇编
- 长途客运员值班制度规范
- 2025届广东省广州市白云区数学八下期末联考试题含解析
- 山东省2024年中考数学试卷8套附解析答案
- 执行款收款账户确认书
- 光环境对植物生长的优化设计-全面剖析
- 资源循环科学与工程专业课程教学大纲汇编
- 装饰装修验收方案
- 2024年中国燃气具行业分析及2025年机会预测
- 七年级上册语文人教版字词带拼音解释(完整版)
- DB14∕T 1754-2018 保模一体板现浇混凝土复合保温系统通.用技术条件
- DB13T 1264-2010 远程射雾技术应用规范
- 员工奖励申请表格模板(可修改)
评论
0/150
提交评论