实验报告C++4Word文档格式.docx
《实验报告C++4Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验报告C++4Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
十一、实验室内一切物品未经允许严禁带出室外,确需带出,必须经过批准并办理手续。
预习报告
实验基本原理与设计(包括实验方案设计、实验手段的确定、电路原理图设计或算法描述)
1、编写一个程序,实现如下功能:
基类为point类,数据为点的横、纵坐标,实现数据初
始化、返回横、纵坐标,对流插入运算符重载输出点的信息;
派生类为line类,数据包含:
从点类继承的线的起始坐标,基类的子对象(线的终点坐标),线的颜色,实现数据初始化、对流插入运算符重载输出线的信息(包含点的起始和终点坐标,线的距离和颜色;
point类和line类中均有计算距离的函数。
输出点和线的信息,以及利用多态性实现输出点和线的距离。
类的设计如下:
基类:
point类
数据:
点的横坐标和纵坐标(x,y)
成员函数:
(1)构造函数:
初始化工作
(2)intgetx():
返回横坐标
(3)intgety():
返回纵坐标
(4)virtualdoubledistance()返回值为0.0
(5)对流插入运算符重载输出点的信息
派生类:
line类
pointb;
//子对象,终点坐标
charcolor[10];
//线的颜色
初始化:
基类数据(点的起始坐标),子对象(点的终点坐标),线的颜色的初始化virtualdoubledistance();
//计算线的坐标
(2)对流插入运算符重载输出线的信息(起始坐标,终点坐标,颜色,距离)
2、编写一个程序,定义抽象类shape,由它派生出5个派生类:
circle(圆形),square(正方形),rectangle(矩形),trapezoid(梯形),triangle(三角性)。
用虚函数分别计算几种图形面积,并求他们的和。
要求用基类指针数组,使它每一个元素指向一个派生类对象。
类的数据:
shape:
面积
circle(圆形)半径doublera;
square(正方形)边长doubleside;
rectangle(矩形)长,宽doublewide;
doubleheight;
trapezoid(梯形)上底,下底,高doubletop;
doublebottom;
triangle(三角形)底,高doubleheight;
doublewidth;
面积virtualdoublearea()const=0;
circle(圆形)半径:
circle(doubler):
ra(r){};
返回面积:
virtualdoublearea()const{returnpi*ra*ra;
}
square(正方形)半径square(doubles):
side(s){};
返回面积virtualdoublearea()const{returnside*side;
rectangle(矩形)长宽rectangle(doublew,doubleh):
wide(w),height(h){};
返回面积virtualdoublearea()const{returnwide*height;
trapezoid(梯形)上底,下底,高trapezoid(doublet,doubleb,doubleh):
top(t),bottom(b),height(h){};
返回面积virtualdoublearea()const{return(top+bottom)*height/2;
triangle(三角性)底,高trigangle(doubleh,doublew):
height(h),width(w){};
返回面积virtualdoublearea()const{returnheight*width/2;
类外函数:
输出面积voidprintarea(constshape&
s)
{cout<
<
s.area()<
endl;
1、实验目的
1、掌握多态性的概念。
2、掌握虚函数的作用及使用方法。
3、掌握纯虚函数和抽象类使用方法。
2、实验仪器设备(或软件平台)
序号
实验设备名称(或软件平台)
规格型号
备注
1
硬件
Intel:
i3处理器
WD500G硬盘
Intel(R)HDGraphics集成显卡
2
软件
WindowsXP
MicrosoftVisioc++6.0
Word2010
3
4
5
3、实验过程(包括调试方法描述、实验数据记录、实验现象记录、实验过程发现的问题等)
程序代码如下:
#include<
iostream.h>
math.h>
string.h>
classpoint
{public:
point(inta,intb):
x(a),y(b){}
intgetx(){returnx;
intgety(){returny;
virtualdoubledistance(){return0.0;
friendostream&
operator<
(ostream&
point&
);
protected:
intx;
inty;
};
ostream&
output,point&
p)
{output<
"
["
p.x<
"
p.y<
]"
returnoutput;
classline:
publicpoint
line(inta,intb,inta1,intb1,charc[]):
point(a,b),b(a1,b1)
{strcpy(color,c);
virtualdoubledistance()
{returnsqrt((x-b.getx())*(x-b.getx())+(y-gety())*(y-gety()));
line&
pointb;
output,line&
l)
起点坐标"
("
l.x<
l.y<
)"
output<
终点坐标"
l.b<
颜色"
l.color<
距离"
l.distance()<
intmain()
{
pointp(1,1);
linel(1,1,2,2,"
白色"
cout<
p;
l;
point*p1=&
点之间的距离"
p1->
distance()<
p1=&
线之间的距离"
return0;
}
iostream>
usingnamespacestd;
constdoublepi=3.1416;
classshape
public:
virtualdoublearea()const=0;
classcircle:
publicshape
circle(doubler):
virtualdoublearea()const{returnpi*ra*ra;
doublera;
classsquare:
square(doubles):
virtualdoublearea()const{returnside*side;
doubleside;
classrectangle:
rectangle(doublew,doubleh):
virtualdoublearea()const{returnwide*height;
doublewide;
doubleheight;
classtrapezoid:
trapezoid(doublet,doubleb,doubleh):
virtualdoublearea()const{return(top+bottom)*height/2;
doubletop;
doublebottom;
classtrigangle:
trigangle(doubleh,doublew):
virtualdoublearea()const{returnheight*width/2;
doublewidth;
voidprintarea(constshape&
circlecircle(2.2);
squaresquare(2.2);
rectanglerectangle(4.5,8.4);
trapezoidtrapezoid(2.0,4.5,3.2);
trigangletrigangle(4.5,8.4);
shape*pt[5]={&
circle,&
square,&
rectangle,&
trapezoid,&
trigangle};
doubleareas=0.0;
for(inti=0;
i<
5;
i++)
{areas=areas+pt[i]->
area();
cout<
totalofallareas="
areas<
return0;
4、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
程序结果如下:
五、实验总结(心得体会)
1、掌握虚析构函数的实验。
析构函数的作用是在对象撤销之前做必要的清理现场的工作。
当派生类的对象从内存中撤销时一般先调用派生类的析构函数,然后再调用基类的析构函数。
但是用new运算符建立了临时对象,若基类中有析构函数,并且定义了一个执行该基类的指针变量。
程序用带指针参数的delete运算符撤销对象时,会发生一个情况:
系统会只执行基类的析构函数,而不执行派生类的析构函数。
2、虚函数的使用方法:
(1)在基类中用virtual声明成员函数为虚函数。
在类外定义虚函数时,不必再加vietual。
(2)在派生类中重新定义此函数,函数名,函数类型,函数参数个数和类型必须与基类的虚函数相同,根据派生类的需要重新定义函数体。
(3)定义一个纸箱基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。
(4)通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。
3、掌握静态关联和动态关联的概念和用法。
确定调用的具体对象的过程为关联。
函数重载和通过对象名调用的虚函数,在编译时即可确定其调用的虚函数属于哪一个类,其过程为静态关联。
由于在运行阶段把虚函数和类对象绑定在一起,过程为动态关联。
4、掌握纯虚函数和抽象类的概念和用法。
纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。
如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该函数在派生类中仍然为纯虚函数。
不用来定义对象而只作为一种基本类型作为继承的类,称为抽象类。
凡是包含纯虚函数的类都是抽象类。
因为纯虚函数是不能被调用的,包含纯虚函数的类时无法建立对象的。
抽象类的作用是作为一个类族的共同基类,或者说,为一个类族提供一个公共接口。