实验一221010021戴嘉乐标准实验报告C.docx
- 文档编号:16548513
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:24
- 大小:188.78KB
实验一221010021戴嘉乐标准实验报告C.docx
《实验一221010021戴嘉乐标准实验报告C.docx》由会员分享,可在线阅读,更多相关《实验一221010021戴嘉乐标准实验报告C.docx(24页珍藏版)》请在冰点文库上搜索。
实验一221010021戴嘉乐标准实验报告C
电子科技大学
实验报告
学生姓名:
戴嘉乐学号:
2012221010021指导教师:
陈安龙
实验地点:
信软楼305实验时间:
2013.11.4
一、实验室名称:
软件实验室
二、实验项目名称:
面向对象程序设计—数据封装
三、实验学时:
8
四、实验原理:
数据封装将一组数据和这组数据有关的操作集合封装在一起,形成一个能动的实体,称为对象。
用户不必知道对象行为的实现细节,只需根据对象提供的外部特性接口访问对象。
面向对象技术试图通过建立一个合适的数据类型,将描述对象的属性(数据)和行为(函数)结合在一起,形成一个新的抽象数据类型,称为类类型(class)。
类是C++的封装机制,其中包括了数据成员和成员函数。
在C++类中,能确保数据只能由类中的成员函数进行访问和处理。
在任何时候,都可以自由地改变数据成员的组织形式,只需改变成员函数的实现细节。
由于这些成员函数的接口不改变,系统其他部分的程序(及使用者)就不会由于改动而受到影响。
类的概念将数据和与这个数据有关的操作集合封装在一起,建立了一个定义良好的接口,人们只关心其使用,不关心其实现细节。
这反应了抽象数据类型的思想。
五、实验目的:
本实验通过编写一些简单的程序,使学生掌握数据封装的概念,并能熟练编写C++类,培养理论联系实际和自主学习的能力,提高程序设计水平。
六、实验内容:
一位小学教师Ken希望完成这样的任务:
针对于小学生正在学习四边形(quadrangle)的特性,编写一个小软件,能够随机在屏幕上显示矩形(rectangle)、正方形(square)、平行四边形(parallelogram)、梯形(trapezoid)和菱形(diamond)五种形体之一,同时显示该形体的特性和关键数据(随机产生),学生复习形体的特性,然后根据给出的关键数据计算形体的面积,软件判断其结果的正确性。
在学习过程中,软件记录产生的每一个形体,在学生选择不再继续后,将其学习的过程重放一遍,用以重温,加深印象。
根据Ken老师的要求,需要至少编写六个类:
1)Rectangle
2)Square
3)Parallelogram
4)Trapezoid
5)Diamond
6)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;//高和宽
};
#endif
List.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);//遍历
};
#endif
parallelogram.h头文件:
#ifndef__PARALLELOGRAM__
#define__PARALLELOGRAM__
classParallelogram
{
public:
stringname;//形体的标识
Parallelogram(intw=15,inth=17);
~Parallelogram();
voiddraw();
doublearea();
stringwhat();
private:
intwidth,height;//高和宽
};
#endif
quad.h头文件:
#ifndef__QUADRANGLE__
#define__QUADRANGLE__
classQuadrangle
{
public:
stringname;//形体的标识
};
typedefQuadrangle*QUADPTR;
#endif
rect.h头文件:
#ifndef__RECT__
#define__RECT__
classRectangle
{
public:
stringname;//形体的标识
Rectangle(intw=5,inth=7);
~Rectangle();
voiddraw();
doublearea();
stringwhat();
private:
intwidth,height;//高和宽
};
#endif
square.h头文件:
#ifndef__SQUARE__
#define__SQUARE__
classSquare
{
public:
stringname;//形体的标识
Square(intb=5);
~Square();
voiddraw();
doublearea();
stringwhat();
private:
intbianchang;
};
#endif
trapezoid.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
#include
usingnamespacestd;
#include"diamond.h"
Diamond:
:
Diamond(intdjxf,intdjxs):
name("Diamond"),duijiaoxianf(djxf),duijiaoxians(djxf){}
Diamond:
:
~Diamond(){}
voidDiamond:
:
draw()
{
cout< 第一条对角线长="< } doubleDiamond: : area() { //返回形体的面积,请自行将代码补充完整 returnduijiaoxianf*duijiaoxianf/2; } stringDiamond: : what() { //返回形体的标识,请自行将代码补充完整 returnname; } List.cpp文件: #include #include 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 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 #include usingnamespacestd; #include"parallelogram.h" Parallelogram: : Parallelogram(intw,inth): name("Parallelogram"),width(w),height(h){} Parallelogram: : ~Parallelogram(){} voidParallelogram: : draw() { cout< width="< } doubleParallelogram: : area() { //返回形体的面积,请自行将代码补充完整 returnwidth*height; } stringParallelogram: : what() { //返回形体的标识,请自行将代码补充完整 returnname; } rect.cpp文件: #include #include usingnamespacestd; #include"rect.h" Rectangle: : Rectangle(intw,inth): name("Rectangle"),width(w),height(h){} Rectangle: : ~Rectangle(){} voidRectangle: : draw() { cout< width="< } doubleRectangle: : area() { //返回形体的面积,请自行将代码补充完整 returnwidth*height; } stringRectangle: : what() { //返回形体的标识,请自行将代码补充完整 returnname; } square.cpp文件: #include #include usingnamespacestd; #include"square.h" Square: : Square(intb): name("Square"),bianchang(b){} Square: : ~Square(){} voidSquare: : draw() { cout< 边长="< } doubleSquare: : area() { //返回形体的面积,请自行将代码补充完整 returnbianchang*bianchang; } stringSquare: : what() { //返回形体的标识,请自行将代码补充完整 returnname; } trapezoid.cpp文件: #include #include usingnamespacestd; #include"trapezoid.h" Trapezoid: : Trapezoid(intbs,intbf,inth): name("Trapezoid"),bianchangf(bf),bianchangs(bs),height(h){} Trapezoid: : ~Trapezoid(){} voidTrapezoid: : draw() { cout< 上底="< 下底="< } doubleTrapezoid: : area() { //返回形体的面积,请自行将代码补充完整 return(bianchangf+bianchangs)*height/2; } stringTrapezoid: : what() { //返回形体的标识,请自行将代码补充完整 returnname; } 3.编写主函数 Main.cpp: #include #include #include #include usingnamespacestd; #include"quad.h" #include"rect.h" #include"List.h" #include"diamond.h" #include"parallelogram.h" #include"trapezoid.h" #include"square.h" //#defineINT_MAX4 voidaccess(QUADPTRquad) { if(quad->name=="Rectangle") { Rectangle*p=reinterpret_cast p->draw(); cout<<"area="< } elseif(quad->name=="Diamond") { Diamond*p=reinterpret_cast p->draw(); cout<<"area="< } elseif(quad->name=="Parallelogram") { Parallelogram*p=reinterpret_cast p->draw(); cout<<"area="< } elseif(quad->name=="Square") { Square*p=reinterpret_cast p->draw(); cout<<"area="< } elseif(quad->name=="Trapezoid") { Trapezoid*p=reinterpret_cast p->draw(); cout<<"area="< } } 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++实验一================="< cout<<"=====信息工程一班2012221010021戴嘉乐====="< cout<<"============1.开始答题o(∩_∩)o============"< cout<<"============2.结束测试(┬_┬)============"< cout<<"请输入你的选项: "< 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<<"计算随机生成图形的面积,并输入你的答案: "< intanswer1; cin>>answer1; if(answer1==rect.area()) { cout<<"恭喜你,答对了"< } else { cout<<"真遗憾,答错了"< } list.push_back(reinterpret_cast break; case2: trapezoid.what(); trapezoid.draw(); cout<<"计算随机生成图形的面积,并输入你的答案: "< intanswer2; cin>>answer2; if(answer2==trapezoid.area()) { cout<<"恭喜你,答对了"< } else { cout<<"真遗憾,答错了"< } list.push_back(reinterpret_cast break; case3: parallelogram.w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 221010021 戴嘉乐 标准 报告