实验报告C++4.docx
- 文档编号:5869101
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:12
- 大小:95.71KB
实验报告C++4.docx
《实验报告C++4.docx》由会员分享,可在线阅读,更多相关《实验报告C++4.docx(12页珍藏版)》请在冰豆网上搜索。
实验报告C++4
无锡太湖学院
实验报告
学院工学院
课程名称C++面向对象的程序设计
第4次实验
实验名称:
多态性和虚函数
专业电信班级131
姓名齐晓雨学号1322002
成绩指导老师签字包莹莹
实验时间2015年12月10日
学生实验室守则
一、按教学安排准时到实验室上实验课,不得迟到、早退和旷课。
二、进入实验室必须遵守实验室的各项规章制度,保持室内安静、整洁,不准在室内打闹、喧哗、吸烟、吃食物、随地吐痰、乱扔杂物,不准做与实验内容无关的事,非实验用品一律不准带进实验室。
三、实验前必须做好预习(或按要求写好预习报告),未做预习者不准参加实验。
四、实验必须服从教师的安排和指导,认真按规程操作,未经教师允许不得擅自动用仪器设备,特别是与本实验无关的仪器设备和设施,如擅自动用或违反操作规程造成损坏,应按规定赔偿,严重者给予纪律处分。
五、实验中要节约水、电、气及其它消耗材料。
六、细心观察、如实记录实验现象和结果,不得抄袭或随意更改原始记录和数据,不得擅离操作岗位和干扰他人实验。
七、使用易燃、易爆、腐蚀性、有毒有害物品或接触带电设备进行实验,应特别注意规范操作,注意防护;若发生意外,要保持冷静,并及时向指导教师和管理人员报告,不得自行处理。
仪器设备发生故障和损坏,应立即停止实验,并主动向指导教师报告,不得自行拆卸查看和拼装。
八、实验完毕,应清理好实验仪器设备并放回原位,清扫好实验现场,经指导教师检查认可并将实验记录交指导教师检查签字后方可离去。
九、无故不参加实验者,应写出检查,提出申请并经批准后,方可补做。
十、自选实验,应事先预约,拟订出实验方案,经实验室负责人同意后,在指导教师或实验技术人员的指导下进行。
十一、实验室内一切物品未经允许严禁带出室外,确需带出,必须经过批准并办理手续。
预习报告
实验基本原理与设计(包括实验方案设计、实验手段的确定、电路原理图设计或算法描述)
1、编写一个程序,实现如下功能:
基类为point类,数据为点的横、纵坐标,实现数据初
始化、返回横、纵坐标,对流插入运算符重载输出点的信息;派生类为line类,数据包含:
从点类继承的线的起始坐标,基类的子对象(线的终点坐标),线的颜色,实现数据初始化、对流插入运算符重载输出线的信息(包含点的起始和终点坐标,线的距离和颜色;point类和line类中均有计算距离的函数。
输出点和线的信息,以及利用多态性实现输出点和线的距离。
类的设计如下:
基类:
point类
数据:
点的横坐标和纵坐标(x,y)
成员函数:
(1)构造函数:
初始化工作
(2)intgetx():
返回横坐标
(3)intgety():
返回纵坐标
(4)virtualdoubledistance()返回值为0.0
(5)对流插入运算符重载输出点的信息
派生类:
line类
数据:
pointb;//子对象,终点坐标
charcolor[10];//线的颜色
成员函数:
(1)构造函数:
初始化:
基类数据(点的起始坐标),子对象(点的终点坐标),线的颜色的初始化virtualdoubledistance();//计算线的坐标
(2)对流插入运算符重载输出线的信息(起始坐标,终点坐标,颜色,距离)
2、编写一个程序,定义抽象类shape,由它派生出5个派生类:
circle(圆形),square(正方形),rectangle(矩形),trapezoid(梯形),triangle(三角性)。
用虚函数分别计算几种图形面积,并求他们的和。
要求用基类指针数组,使它每一个元素指向一个派生类对象。
类的设计如下:
类的数据:
shape:
面积
circle(圆形)半径doublera;
square(正方形)边长doubleside;
rectangle(矩形)长,宽doublewide;doubleheight;
trapezoid(梯形)上底,下底,高doubletop;doublebottom;doubleheight;
triangle(三角形)底,高doubleheight;doublewidth;
成员函数:
shape:
面积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< 1、实验目的 1、掌握多态性的概念。 2、掌握虚函数的作用及使用方法。 3、掌握纯虚函数和抽象类使用方法。 2、实验仪器设备(或软件平台) 序号 实验设备名称(或软件平台) 规格型号 备注 1 硬件 Intel: i3处理器 WD500G硬盘 Intel(R)HDGraphics集成显卡 2 软件 WindowsXP MicrosoftVisioc++6.0 Word2010 3 4 5 3、实验过程(包括调试方法描述、实验数据记录、实验现象记录、实验过程发现的问题等) 1、编写一个程序,实现如下功能: 基类为point类,数据为点的横、纵坐标,实现数据初 始化、返回横、纵坐标,对流插入运算符重载输出点的信息;派生类为line类,数据包含: 从点类继承的线的起始坐标,基类的子对象(线的终点坐标),线的颜色,实现数据初始化、对流插入运算符重载输出线的信息(包含点的起始和终点坐标,线的距离和颜色;point类和line类中均有计算距离的函数。 输出点和线的信息,以及利用多态性实现输出点和线的距离。 程序代码如下: #include #include #include classpoint {public: point(inta,intb): x(a),y(b){} intgetx(){returnx;} intgety(){returny;} virtualdoubledistance(){return0.0;} friendostream&operator<<(ostream&,point&); protected: intx; inty; }; ostream&operator<<(ostream&output,point&p) {output<<"["< returnoutput; } classline: publicpoint {public: 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()));} friendostream&operator<<(ostream&,line&); protected: pointb; charcolor[10]; }; ostream&operator<<(ostream&output,line&l) {output<<"起点坐标"<<"("< output<<"终点坐标"< output<<"颜色"< output<<"距离"< returnoutput; } intmain() { pointp(1,1); linel(1,1,2,2,"白色"); cout< cout< point*p1=&p; cout<<"点之间的距离"< p1=&l; cout<<"线之间的距离"< return0; } 2、编写一个程序,定义抽象类shape,由它派生出5个派生类: circle(圆形),square(正方形),rectangle(矩形),trapezoid(梯形),triangle(三角性)。 用虚函数分别计算几种图形面积,并求他们的和。 要求用基类指针数组,使它每一个元素指向一个派生类对象。 程序代码如下: #include usingnamespacestd; constdoublepi=3.1416; classshape { public: virtualdoublearea()const=0; }; classcircle: publicshape { public: circle(doubler): ra(r){}; virtualdoublearea()const{returnpi*ra*ra;} protected: doublera; }; classsquare: publicshape { public: square(doubles): side(s){}; virtualdoublearea()const{returnside*side;} protected: doubleside; }; classrectangle: publicshape { public: rectangle(doublew,doubleh): wide(w),height(h){}; virtualdoublearea()const{returnwide*height;} protected: doublewide; doubleheight; }; classtrapezoid: publicshape { public: trapezoid(doublet,doubleb,doubleh): top(t),bottom(b),height(h){}; virtualdoublearea()const{return(top+bottom)*height/2;} protected: doubletop; doublebottom; doubleheight; }; classtrigangle: publicshape { public: trigangle(doubleh,doublew): height(h),width(w){}; virtualdoublearea()const{returnheight*width/2;} protected: doubleheight; doublewidth; }; voidprintarea(constshape&s) {cout< intmain() { 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="< return0; } 4、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) 1、编写一个程序,实现如下功能: 基类为point类,数据为点的横、纵坐标,实现数据初 始化、返回横、纵坐标,对流插入运算符重载输出点的信息;派生类为line类,数据包含: 从点类继承的线的起始坐标,基类的子对象(线的终点坐标),线的颜色,实现数据初始化、对流插入运算符重载输出线的信息(包含点的起始和终点坐标,线的距离和颜色;point类和line类中均有计算距离的函数。 输出点和线的信息,以及利用多态性实现输出点和线的距离。 程序结果如下: 2、编写一个程序,定义抽象类shape,由它派生出5个派生类: circle(圆形),square(正方形),rectangle(矩形),trapezoid(梯形),triangle(三角性)。 用虚函数分别计算几种图形面积,并求他们的和。 要求用基类指针数组,使它每一个元素指向一个派生类对象。 程序结果如下: 五、实验总结(心得体会) 1、掌握虚析构函数的实验。 析构函数的作用是在对象撤销之前做必要的清理现场的工作。 当派生类的对象从内存中撤销时一般先调用派生类的析构函数,然后再调用基类的析构函数。 但是用new运算符建立了临时对象,若基类中有析构函数,并且定义了一个执行该基类的指针变量。 程序用带指针参数的delete运算符撤销对象时,会发生一个情况: 系统会只执行基类的析构函数,而不执行派生类的析构函数。 2、虚函数的使用方法: (1)在基类中用virtual声明成员函数为虚函数。 在类外定义虚函数时,不必再加vietual。 (2)在派生类中重新定义此函数,函数名,函数类型,函数参数个数和类型必须与基类的虚函数相同,根据派生类的需要重新定义函数体。 (3)定义一个纸箱基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。 (4)通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。 3、掌握静态关联和动态关联的概念和用法。 确定调用的具体对象的过程为关联。 函数重载和通过对象名调用的虚函数,在编译时即可确定其调用的虚函数属于哪一个类,其过程为静态关联。 由于在运行阶段把虚函数和类对象绑定在一起,过程为动态关联。 4、掌握纯虚函数和抽象类的概念和用法。 纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。 如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该函数在派生类中仍然为纯虚函数。 不用来定义对象而只作为一种基本类型作为继承的类,称为抽象类。 凡是包含纯虚函数的类都是抽象类。 因为纯虚函数是不能被调用的,包含纯虚函数的类时无法建立对象的。 抽象类的作用是作为一个类族的共同基类,或者说,为一个类族提供一个公共接口。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 C+
![提示](https://static.bdocx.com/images/bang_tan.gif)