西安交大C++程序设计第十章作业说课讲解.doc
《西安交大C++程序设计第十章作业说课讲解.doc》由会员分享,可在线阅读,更多相关《西安交大C++程序设计第十章作业说课讲解.doc(44页珍藏版)》请在咨信网上搜索。
1、西安交大C+程序设计第十章作业精品资料西安交通大学实验报告课程_计算机程序设计_实验名称_多态性_第 1 页 共 44 页系 别_ _ 实 验 日 期 2014 年 5 月 31 日专业班级_ _组别_ 实 验 报 告 日 期 2014 年 5 月 31 日姓 名_ _学号_ _ 报 告 退 发 ( 订正 、 重做 )同 组 人_ 教 师 审 批 签 字 一、实验目的理解掌握多态的使用方法,学会用虚函数。二、实验内容 (一)第一题:定义一个类Base,该类含有虚函数display,然后定义它的两个派生类FirstB和SecondB,这两个派生类均含有公有成员函数display,在主程序中,定义
2、指向基类Base的指针变量ptr,并分别定义Base、FirstB、Second的对象b1、f1、s1,让ptr分别指向b1、f1、s1的起始地址,然后指向执行这些对象的成员函数display。1.源程序代码:#includeusing namespace std;class Base public:virtual void display()coutsound!sound!sound!;class FirstB:public Basepublic:void virtual display()coutmiao!miao!miao!;class SecondB:public Basepublic
3、:void virtual display()coutwang!wang!wang!;int main()Base *ptr;Base b1;FirstB f1;SecondB s1;coutdisplay();coutdisplay();coutdisplay();coutendl;return 0; 2.实验结果:(二)第二题: 扩充例10-5,从中派生一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。1.源程序代码: /shape类shape.h文件#ifndef SHAPE_H#define SHAPE_H#includeusing namespace std;c
4、lass Shapepublic:virtual double Area()constreturn 0.0;/纯虚函数,在派生类中重载virtual double Volume() const=0;virtual void PrintShapeName() const=0;virtual void Print() const=0;#endif/point.h点类#ifndef POINT_H#define POINT_H#include#includeshape.husing namespace std;class Point:public Shapeint x,y;public:Point(
5、int a=0,int b=0)SetPoint(a,b);void SetPoint(int a,int b)x=a;y=b;int GetX()return x;int GetY()return y;virtual double Volume() constreturn 0.0;virtual void PrintShapeName()constcoutPoint:;virtual void Print()constcoutx,y;#endif/circle.h圆类#ifndef CIRCLE_H#define CIRCLE_H#include#includepoint.husing na
6、mespace std;class Circle:public Pointdouble radius;public:Circle(int x=0,int y=0,double r=0.0):Point(x,y)SetRadius(r);void SetRadius(double r)radius=(r=0?r:0);double GetRadius() constreturn radius;virtual double Area() constreturn 3.14159*radius*radius;virtual double Volume() constreturn 0.0;virtual
7、 void PrintShapeName() constcoutCircle:;void Print() constcoutCenter=;Point:Print();cout;Radius=radiusendl;#endif/rectangle.h矩形类#ifndef RECTANGULAR_H#define RECTANGULAR_H#include#includepoint.husing namespace std;class Rectangle:public Pointdouble length,width;public:Rectangle(int x=0,int y=0,double
8、 l=0.0,double w=0.0):Point(x,y)SetLength(l);SetWidth(w);void SetLength(double l)length=(l=0?l:0);void SetWidth(double w)width=(w=0?w:0);double GetLength() constreturn length;double GetWidth() constreturn width;virtual double Area() constreturn length*width;virtual double Volume() constreturn 0.0;vir
9、tual void Print() constcoutLeft Top Vertex=;Point:Print();cout;Length=length,Width=widthendl;virtual void PrintShapeName() constcoutRectangle:;#endif/cylinder.h圆柱体类#ifndef CYLINDER_H#define CYLINDER_H#includecircle.h#include;using namespace std;class Cylinder:public Circledouble height;public:Cylind
10、er(int x=0,int y=0,double r=0,double h=0):Circle(x,y,r)SetHeight(h);void SetHeight(double h)height=(h=0?h:0);double GetHeight() constreturn height;double Volume() constreturn Area()*height;virtual void PrintShapeName() constcoutCylinder:;void Print() constCircle:Print();coutHeight=heightendl;#endif/
11、square.h正方形类,几乎跟矩形类一样而已#ifndef SQUARE_H#define Square_H#includerectangle.h#includeusing namespace std;class Square:public Rectangledouble sidelength;public:Square(int x=0,int y=0,double s=0.0):Rectangle(x,y)Seta(s);void Seta(double s)sidelength=s;virtual double Area() constreturn sidelength*sideleng
12、th;virtual double Volume() constreturn 0.0;virtual void Print() constcoutLeft Top Vertex=;Point:Print();cout;Length=sidelengthendl;virtual void PrintShapeName() constcoutSquare:;#endifmain.h/要求:派生出圆柱类和正方形类,计算面积、体积#include#includeshape.h#includepoint.h#includecircle.h#includerectangle.h#includesquare
13、.h#includecylinder.husing namespace std;/为何系统报错提示要输入一个“;”在此句首?void virtualViaPointer(const Shape*);void virtualViaReference(const Shape&);int main()/创建point circle rectangular对象信息Point point(30,50);Circle circle(120,80,10.0);Rectangle rectangle(10,10,8.0,5.0);Square square(10,20,5.0);Cylinder cylind
14、er(120,80,10.0,40.0);/输出point circle rectangular 对象信息point.PrintShapeName();point.Print();coutendl;circle.PrintShapeName();circle.Print();rectangle.PrintShapeName();rectangle.Print();square.PrintShapeName();square.Print();cylinder.PrintShapeName();cylinder.Print();/定义基类对象指针Shape *arrayOfShapes5;/定义了
15、个基类指针arrayOfShapes0=&point;arrayOfShapes1=&circle;arrayOfShapes2=&rectangle;arrayOfShapes3=□arrayOfShapes4=&cylinder;/通过基类对象指针访问派生类对象coutVirtual function calls made offbase-class pointersn;for(int i=0;i5;i+)virtualViaPointer(arrayOfShapesi);coutVirtual function calls made offbase-case referen
16、cesn;for(int j=0;jPrintShapeName();baseClassPtr-Print();coutArea=Area();couttVolume=Volume()endl;/通过基类对象引用访问虚函数实现动态绑定?void virtualViaReference(const Shape &baseClassRef)baseClassRef.PrintShapeName();baseClassRef.Print();coutArea=baseClassRef.Area();couttVolume=baseClassRef.Volume()endl;2.实验结果: (三)第三
17、题: 扩充实例编程中的日期类,为Date增加一个成员函数,可以判断日期是否为系统当前日期。从键盘输入你的生日,如果今天是你的生日则显示:“Harry Birthday!”否则显示“还有*天是你的生日”或者“你的生日已经过去了* 天,距离明年生日还有*天”。1.源程序代码:/ 日期类定义date.h#ifndef DATE_H#define DATE_H#include using namespace std;class Date int day,month,year;void IncDay();/日期增加一天int DayCalc() const;/距基准日期的天数static const i
18、nt days;/每月的天数public:Date( int y, int m, int d);/构造函数Date( int m, int d);/构造函数,年默认为系统当前年份Date();/构造函数,默认为系统日期void SystemDate();void SetDate( int yy, int mm, int dd );/日期设置void SetDate( int mm, int dd );/日期设置,年默认为系统年份bool IsLeapYear(int yy) const;/ 是否闰年?bool IsEndofMonth() const;/ 是否月末?void print_ymd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 C+ 程序设计 第十 作业 讲解
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。