版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,.电子科技大学实 验 报 告学生姓名:戴嘉乐学号:
2012221010021
指导教师:陈安龙实验地点:信软楼305
实验时间:2013.11.4一、实验室名称:软件实验室二、实验项目名称:面向对象程序设计—数据封装三、实验学时:8四、实验原理:数据封装将一组数据和这组数据有关的操作集合封装在一起,形成一个感谢阅读能动的实体,称为对象。用户不必知道对象行为的实现细节,只需根据对象感谢阅读提供的外部特性接口访问对象。面向对象技术试图通过建立一个合适的数据类型,将描述对象的属性(数精品文档放心下载据)和行为(函数)结合在一起,形成一个新的抽象数据类型,称为类类型感谢阅读(class)。类是C++的封装机制,其中包括了数据成员和成员函数。精品文档放心下载C++类中,能确保数据只能由类中的成员函数进行访问和处理。在任何时候,都可以自由地改变数据成员的组织形式,只需改变成员函数的实现细节。由于这些成员函数的接口不改变,系统其他部分的程序(及使用者)就不会由于改动而受到影响。谢谢阅读,.类的概念将数据和与这个数据有关的操作集合封装在一起,建立了一个感谢阅读定义良好的接口,人们只关心其使用,不关心其实现细节。这反应了抽象数精品文档放心下载据类型的思想。五、实验目的:本实验通过编写一些简单的程序,使学生掌握数据封装的概念,并能熟感谢阅读练编写C++类,培养理论联系实际和自主学习的能力,提高程序设计水平。精品文档放心下载六、实验内容:一位小学教师Ken希望完成这样的任务:针对于小学生正在学习四边形(quadrangle)的特性,编写一个小软件,能够随机在屏幕上显示矩形(rectangle)、正方形(square)、平行四边形(parallelogram)、梯形(trapezoid)和菱形(diamond)五种形体之一,同时显示该形体的特性和关键数据(随机产生),学生复习形体的特性,然后根据给出的关键数据计算形体的面积,软件判断其结果的正确性。在学习过程中,软件记录产生的每一个形体,在学生选择不再继续后,将其学习的过程重放一遍,用以重温,加深印象。感谢阅读根据Ken老师的要求,需要至少编写六个类:1)Rectangle2)Square3)Parallelogram4)Trapezoid5)Diamond6)List其中,前五个类用于描述五种形体。五种形体不用顶点坐标的表示形式,精品文档放心下载,.而只是简单地用它们的特征值表示。例如:矩形、平行四边形用长和高表示;正方形用边长表示;梯形用两条平行边长和高表示;菱形用两条对象线长表示。要求为这五种形体编写相应的类,类中包括至少如下数据成员和成员函数:谢谢阅读1)特征值,例如长和宽等;2)stringname;用于存储形体的类别。类别的名字就是类的名字。例感谢阅读如:Rectangle类的类别名就是“Rectangle”;谢谢阅读3)doublearea();用于求形体的面积;感谢阅读4)voiddraw();用于绘制形体。不要求用图形的方式画图形,只需要谢谢阅读简单地打印出形体的类别和特征值;5)构造(包括拷贝构造)函数和析构函数。构造函数要带有相应的参感谢阅读数以能够用指定特征值初始化形体对象。此外,List类用于存储各种形体。形体的产生可以通过随机的方式完成。不过,List类的push_back()成员的代码需要自行完成。附件中给出了List类的大部分代码。精品文档放心下载重温过程实际上就是遍历List类对象的过程。这个过程可能有些复杂,附件中也给出了遍历的示例代码。感谢阅读附件中给出了其它需要的示例代码,以及解题思路,请参阅。精品文档放心下载注:请将此实验编写的代码完整保存,此后的两项实验都要以本次实验谢谢阅读的代码为基础。实验四属于选作实验。七、实验器材(设备、元器件):,.PC机一台,装有C/C++语言集成开发环境。八、实验步骤:1.先编写类头文件,分别是:diamong.h头文件:#ifndef__DIAMOND__#define__DIAMOND__classDiamond{public:stringname;//形体的标识Diamond(intdjxf=35,intdjxs=37);感谢阅读~Diamond();voiddraw();doublearea();stringwhat();private:intduijiaoxianf,duijiaoxians;//高和宽感谢阅读};,.#endifList.h头文件:#ifndef__LIST__#define__LIST__#include"quad.h"typedefvoid(*ACCESSFUN)(QUADPTR);//定义遍历时节点处理函数类型精品文档放心下载structNode{QUADPTRdata;Node*next;};classList{,.private:Node*head,*tail;public:List();List(constList&l);~List();voidpush_back(constQUADPTRquad);//尾部添加谢谢阅读voidtraverse(ACCESSFUNf);//遍历谢谢阅读};#endifparallelogram.h头文件:#ifndef__PARALLELOGRAM__#define__PARALLELOGRAM__classParallelogram{public:stringname;//形体的标识,.Parallelogram(intw=15,inth=17);精品文档放心下载~Parallelogram();voiddraw();doublearea();stringwhat();private:intwidth,height;//高和宽};#endifquad.h头文件:#ifndef__QUADRANGLE__#define__QUADRANGLE__classQuadrangle{public:stringname;//形体的标识,.};typedefQuadrangle*QUADPTR;感谢阅读#endifrect.h头文件:#ifndef__RECT__#define__RECT__classRectangle{public:stringname;//形体的标识Rectangle(intw=5,inth=7);感谢阅读~Rectangle();voiddraw();doublearea();stringwhat();private:,.intwidth,height;//高和宽};#endifsquare.h头文件:#ifndef__SQUARE__#define__SQUARE__classSquare{public:stringname;//形体的标识Square(intb=5);~Square();voiddraw();doublearea();stringwhat();private:intbianchang;};,.#endiftrapezoid.h头文件:#ifndef__TRAPEZOID__#define__TRAPEZOID__classTrapezoid{public:stringname;//形体的标识Trapezoid(intbf=4,intbs=5,inth=7);谢谢阅读~Trapezoid();voiddraw();doublearea();stringwhat();private:intbianchangf,bianchangs,height;谢谢阅读};#endif,.2.编写资源文件:diamond.cpp文件:#include<iostream>#include<string>usingnamespacestd;#include"diamond.h"Diamond::Diamond(intdjxf,intdjxs):name("Diamond"),duijiaoxianf(djxf),duijiaoxians(djxf)感谢阅读{}Diamond::~Diamond(){}voidDiamond::draw(){cout<<what()<<":第一条对角线长="<<duijiaoxianf<<",第二条对角线长="<<精品文档放心下载duijiaoxians<<endl;},.doubleDiamond::area(){//返回形体的面积,请自行将代码补充完整returnduijiaoxianf*duijiaoxianf/2;精品文档放心下载}stringDiamond::what(){//返回形体的标识,请自行将代码补充完整returnname;}List.cpp文件:#include<iostream>#include<string>usingnamespacestd;#include"List.h"List::List():head(NULL),tail(NULL){}精品文档放心下载,.List::List(constList&l):head(l.head),tail(l.tail){}谢谢阅读/*{head=tail=NULL;Node*p=l.head;while(p!=NULL){this->push_back(p->quad);p=p->next;}}*/List::~List(){//请自行添加释放整个链表的代码Node*p=head,*q;while(p!=NULL){,.q=p;p=p->next;deleteq;}}//insertelementintothetailoflist谢谢阅读voidList::push_back(constQUADPTRquad)精品文档放心下载{//请自行添加在链表尾部增加一个节点的代码。Node*p=newNode;p->data=const_cast<QUADPTR>(quad);感谢阅读p->next=NULL;if(head==NULL||tail==NULL)//第一个节点谢谢阅读{head=tail=p;}else{tail->next=p;,.tail=p;}}voidList::traverse(ACCESSFUNf)精品文档放心下载{Node*p=head;while(p!=NULL){f(p->data);p=p->next;}}parallelogram.cpp文件:#include<iostream>#include<string>usingnamespacestd;#include"parallelogram.h"感谢阅读,.Parallelogram::Parallelogram(intw,inth):name("Parallelogram"),width(w),height(h){}谢谢阅读Parallelogram::~Parallelogram(){}精品文档放心下载voidParallelogram::draw()精品文档放心下载{cout<<what()<<":width="<<width<<",height="<<height<<endl;精品文档放心下载}doubleParallelogram::area()感谢阅读{//返回形体的面积,请自行将代码补充完整returnwidth*height;}stringParallelogram::what()精品文档放心下载{//返回形体的标识,请自行将代码补充完整returnname;},.rect.cpp文件:#include<iostream>#include<string>usingnamespacestd;#include"rect.h"Rectangle::Rectangle(intw,inth):name("Rectangle"),width(w),height(h){}感谢阅读Rectangle::~Rectangle(){}感谢阅读voidRectangle::draw(){cout<<what()<<":width="<<width<<",height="<<height<<endl;感谢阅读}doubleRectangle::area(){//返回形体的面积,请自行将代码补充完整returnwidth*height;},.stringRectangle::what(){//返回形体的标识,请自行将代码补充完整returnname;}square.cpp文件:#include<iostream>#include<string>usingnamespacestd;#include"square.h"Square::Square(intb):name("Square"),bianchang(b){}精品文档放心下载Square::~Square(){}voidSquare::draw(){cout<<what()<<":边长="<<bianchang<< endl;感谢阅读},.doubleSquare::area(){//返回形体的面积,请自行将代码补充完整returnbianchang*bianchang;感谢阅读}stringSquare::what(){//返回形体的标识,请自行将代码补充完整returnname;}trapezoid.cpp文件:#include<iostream>#include<string>usingnamespacestd;#include"trapezoid.h"Trapezoid::Trapezoid(intbs,intbf,inth):name("Trapezoid"),bianchangf(bf),精品文档放心下载bianchangs(bs),height(h){}谢谢阅读,.Trapezoid::~Trapezoid(){}精品文档放心下载voidTrapezoid::draw(){cout<<what()<<":上底="<<bianchangf<<":下底="<<bianchangs<<",高="精品文档放心下载<<height<<endl;}doubleTrapezoid::area(){//返回形体的面积,请自行将代码补充完整return(bianchangf+bianchangs)*height/2;精品文档放心下载}stringTrapezoid::what(){//返回形体的标识,请自行将代码补充完整returnname;},.3.编写主函数Main.cpp:#include<iostream>#include<cstdlib>#include<ctime>#include<string>usingnamespacestd;#include"quad.h"#include"rect.h"#include"List.h"#include"diamond.h"#include"parallelogram.h"谢谢阅读#include"trapezoid.h"#include"square.h"//#defineINT_MAX 4voidaccess(QUADPTRquad){if(quad->name=="Rectangle")感谢阅读{,.Rectangle*p=reinterpret_cast<Rectangle*>(quad);感谢阅读p->draw();cout<<"area="<<p->area()<<endl;谢谢阅读}elseif(quad->name=="Diamond")精品文档放心下载{Diamond*p=reinterpret_cast<Diamond*>(quad);感谢阅读p->draw();cout<<"area="<<p->area()<<endl;精品文档放心下载}elseif(quad->name=="Parallelogram")谢谢阅读{Parallelogram*p=reinterpret_cast<Parallelogram*>(quad);谢谢阅读p->draw();cout<<"area="<<p->area()<<endl;谢谢阅读}elseif(quad->name=="Square")感谢阅读{Square*p=reinterpret_cast<Square*>(quad);谢谢阅读p->draw();,.cout<<"area="<<p->area()<<endl;精品文档放心下载}elseif(quad->name=="Trapezoid")精品文档放心下载{Trapezoid*p=reinterpret_cast<Trapezoid*>(quad);精品文档放心下载p->draw();cout<<"area="<<p->area()<<endl;精品文档放心下载}}intmain(){inta=10;//存储产生的随机数,并初始化intb=20;//存储产生的随机数,并初始化intc=15;//存储产生的随机数,并初始化intd=1;//存储产生的随机数,并初始化//这里至少需要定义五种不同的形体对象,并将它们添加到List对象中。感谢阅读Rectanglerect(a,b);,.Trapezoidtrapezoid(a,b,c);谢谢阅读Diamonddiamond(a,b);Parallelogramparallelogram(a,b);谢谢阅读Squaresquare(a);Listlist;while(1){cout<<"================C++实验一================="<<endl;感谢阅读cout<<"=====信息工程一班2012221010021戴嘉乐====="<<endl;精品文档放心下载cout<<"============1.开始答题o(∩_∩)o============"<<endl;感谢阅读cout<<"============2.结束测试(┬_┬)============"<<endl;精品文档放心下载cout<<"请输入你的选项:"<<endl;charcmd;cin>>cmd;switch(cmd){,.case'1':while(1){/*=====================以下注释为实现答题模式的具体逻辑思路感谢阅读========================*/谢谢阅读//产生随机数a,b,c,d对应特征值,限定abc随机产生范围为(1-100)的整数,d为(1-5)谢谢阅读//新建结构体,存放形体name和编号(1-5),通过随机产生的d来控制随机产生的是什么形体精品文档放心下载//确认随机产生的形体后,给形体附上a,b,c随机特征值谢谢阅读//draw形体//输入area//判断area正确//加入list/*=========================================================精品文档放心下载===========================*/谢谢阅读srand((unsigned)time(NULL));谢谢阅读a=(1+(int)100*rand()/(RAND_MAX+1));感谢阅读b=(1+(int)100*rand()/(RAND_MAX+1));精品文档放心下载c=(1+(int)100*rand()/(RAND_MAX+1));精品文档放心下载d=(1+(int)5*rand()/(RAND_MAX+1));谢谢阅读//以上是随机生成(1-100)整数的公式switch(d){,.case1:rect.what();rect.draw();cout<<"计算随机生成图形的面积,并输入你的答案:谢谢阅读"<<endl;intanswer1;cin>>answer1;if(answer1==rect.area()){cout<<"恭喜你,答对了"<<endl;}else{cout<<"真遗憾,答错了"<<endl;}list.push_back(reinterpret_cast<QUADPTR>(&rect));//已经添加进了list链表中精品文档放心下载break;case2:trapezoid.what();trapezoid.draw();,.cout<<"计算随机生成图形的面积,并输入你的答案:谢谢阅读"<<endl;intanswer2;cin>>answer2;if(answer2==trapezoid.area())感谢阅读{cout<<"恭喜你,答对了"<<endl;}else{cout<<"真遗憾,答错了"<<endl;}list.push_back(reinterpret_cast<QUADPTR>(&trapezoid));//已经添加进了list链表中谢谢阅读break;case3:parallelogram.what();parallelogram.draw();cout<<"计算随机生成图形的面积,并输入你的答案:精品文档放心下载,."<<endl;intanswer3;cin>>answer3;if(answer3==parallelogram.area())感谢阅读{cout<<"恭喜你,答对了"<<endl;}else{cout<<"真遗憾,答错了"<<endl;}list.push_back(reinterpret_cast<QUADPTR>(¶llelogram));//已经添加进了list链表中精品文档放心下载break;case4:diamond.what();diamond.draw();cout<<"计算随机生成图形的面积,并输入你的答案:谢谢阅读"<<endl;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玉溪师范学院《网球主项》2021-2022学年第一学期期末试卷
- 玉溪师范学院《社会体育指导员培训》2021-2022学年第一学期期末试卷
- 化学第十章烃教案
- 测量仪器账务处理实例-记账实操
- 水泥基渗透结晶防水涂料施工指南
- 欣赏竹子课件
- 2024年电子、通信产品及软件批发服务项目成效分析报告
- 2024年羟丙纤维素项目评估分析报告
- 2019粤教版 高中美术 选择性必修2 中国书画《第四单元 意境深邃的山水画》大单元整体教学设计2020课标
- 财务部协调营运部合同
- GB/T 44744-2024粮食储藏低温储粮技术规程
- 自然拼读法-图文.课件
- 苏教版(2024新版)一年级上册科学全册教案教学设计
- 创新创业实训智慧树知到期末考试答案章节答案2024年西安理工大学
- 2024届宜宾市九年级语文上学期期中考试卷附答案解析
- 大学生国家安全教育智慧树知到期末考试答案2024年
- 无人机飞行操作手册
- 2024继续教育《医学科研诚信与医学了研究伦理》答案
- 《埃隆·马斯克传》导读
- MOOC创新创业与管理基础(东南大学)
- 硫磺安全技术说明书MSDS
评论
0/150
提交评论