




免费预览已结束,剩余5页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验十六 继承和派生的基本概念1范例:定义一个继承与派生关系的类体系,在派生类中访问基类成员。先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生方式。编程测试所定义的类体系。【程序】 #include#include using namespace std;const PI=3.14159;class Pointfriend class Line;protected:double x,y;public:Point()x=0;y=0;Point(double xv,double yv)x=xv;y=yv;double Area()return 0;void Show()coutx=x y=yPoint:operator=(cir); radius=cir.radius;return *this;double Area()return PI*radius*radius;void Show()coutx=x y=yradius=radiusn;class LinePoint start,end;public:Line()Line(double xv1,double yv1,double xv2,double yv2):start(xv1,yv1),end(xv2,yv2)double GetLength() return sqrt(start.x-end.x)*(start.x-end.x)+(start.y-end.y)*(start.y-end.y);double Area()return 0;void Show()coutstart point:n;start.Show();coutend point:n;end.Show();int main()Point pt(0,0);Circle cl1(100,100,10),cl2(cl1),cl3;Line ln1(0,0,100,100),ln2;cout点面积:pt.Area()n;pt.Show();coutcl1圆面积:cl1.Area()n;cl1.Show();coutcl2圆面积:cl2.Area()n;cl2.Show(); cl3=cl1; coutcl3圆面积: cl3.Area() endl; cl3.Show(); cout线面积: ln1. Area()t线长度:ln1. GetLength() endl; ln1.Show(); ln2.Show(); return 0;【注意】在Point 类中,将Line 类定义为友元,便于在Line 类中访问;Point 类的x和y 定义为Protected 访问权限,便于派生类访问。注意派生类的构造函数中对基类数据成员的初始化方法(即 Circle(double xv,double yv,double vv):Point(xv,yv)),以及构造函数中对对象成员的初始化方法(即 Line(double xv1,double yv1,double xv2,double yv2) : start(xv1,yv1),end(xv2,yv2) )【要求】 (1) 建立工程,录入上述程序,改变数据实验之。 (2) 修改Point 类的数据成员x ,y 的访问权限为private ,再运行,结果如何?(3) 如果不将Line 类设为 Point 类的友元,应采取什么措施?为哪个类增加数据或函数成员?2 编程:多层派生练习,由上题Point 类和Circle 类继续派生出Cylinder #include#include using namespace std;const PI=3.14159;class Pointfriend class Line;protected:double x,y;public:Point()x=0;y=0;Point(double xv,double yv)x=xv;y=yv;double Area()return 0;void Show()coutx=x y=yPoint:operator=(cir); radius=cir.radius;return *this;double Area()return PI*radius*radius;void Show()coutx=x y=yradius=radiusn;class Cylinder:public Pointdouble Darea,Carea,Qarea,V,radius;double high;public:Cylinder(double xv,double yv,double vv,double h):Point(xv,yv) radius=vv;high=h;Cylinder()x=0;y=0;radius=0;high=0;Darea=0;Carea=0;Qarea=0;V=0;void setDarea()Darea=PI*radius*radius;void setCarea()Carea=2*PI*radius*high;void setQarea()Qarea=2*PI*radius*radius+2*PI*radius*high;void setV() V=PI*radius*radius*high;void Show()coutx=x y=y radius=radius high=highendl;coutDarea=Dareaendl;coutCarea=Careaendl;coutQarea=Qareaendl;coutV=Vendl;class LinePoint start,end;public:Line()Line(double xv1,double yv1,double xv2,double yv2):start(xv1,yv1),end(xv2,yv2)double GetLength() return sqrt(start.x-end.x)*(start.x-end.x)+(start.y-end.y)*(start.y-end.y);double Area()return 0;void Show()coutstart point:n;start.Show();coutend point:n;end.Show();int main()Point pt(0,0);Circle cl1(100,100,10),cl2(cl1),cl3;Line ln1(0,0,100,100),ln2;Cylinder cy1(100,100,10,10);cout点面积:pt.Area()n;pt.Show();coutcl1圆面积:cl1.Area()n;cl1.Show();coutcl2圆面积:cl2.Area()n;cl2.Show(); cl3=cl1; coutcl3圆面积: cl3.Area() endl; cl3.Show(); cout线面积: ln1. Area()t线长度:ln1. GetLength() endl; ln1.Show(); ln2.Show();cout圆柱体的信息:;cy1.Show(); return 0;实验十八 虚函数与多态、纯虚函数 一.实验目的1. 在掌握继承与派生关系的基础上,进一步理解虚函数与多态性的关系,实现运行时的多态。 2. 学会定义和使用纯虚函数 二、实验内容1范例:了解单界面,多方法的概念。现有称为figure的基类,存放了各二维对象(三角形、矩形和圆形三个类)的各维数据,set_dim()设置数据,是标准成员函数。show_area()为虚函数,因为计算各对象的面积的方法是不同的。【程序】#include using namespace std;class figureprotected:double x,y;public:void set_dim(double i,double j=0) x=i; y=j; virtual void show_area() coutNo area computation defined for this class.n;class triangle:public figurepublic:void show_area() coutTriangle with height x and base y has an area of x*0.5*y endl; ;class square:public figurepublic:void show_area() coutSquare with dimensions x and y has an area of x*y endl; ;class circle:public figurepublic: void show_area() coutCircle with radius x has an area of 3.14159*x*xset_dim(10.0,5.0);p-show_area();p=&s;p-set_dim(10.0,5.0);p-show_area();p=&c; p-set_dim(10.0);p-show_area(); return 0; 【要求】(1) 建立工程,录入上述程序,调试运行并记录运行结果。 (2) 修改上述程序,将virtual void show_area()中的virtual去掉,重新调试运行观察结果有何变化?为什么?(3) 修改上述程序入口函数,使其动态建立三角形、矩形和圆形3个对象,通过基类指针访问这3个对象,然后释放这3个对象。 (4) 修改类定义中的析构函数,使之适应用户动态定义对 2、使用纯虚函数和抽象类对实验十六中的题1进行改进。 【要求】先定义一个抽象类Element,提供显示、求面积等公共接口(虚函数),派生出Point、Line、Circle等图形元素类,并重新定义(override)这些虚函数,完成各自的任务。在这里,Element是抽象基类,它不能提供具体的显示操作,应将其成员函数定义为纯虚函数。只有采用指向基类的指针或对基类的引用进行调用,实现的才是动态绑定,完成运行时的多态性。3、编写计算定积分的类。采用纯虚函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 杏仁制品拓展创新创业项目商业计划书
- 宠物食品国际服务创新创业项目商业计划书
- 数字影视制作平台创新创业项目商业计划书
- 临时供水合同(标准版)
- 坚果风味坚果脆片混合包装创新创业项目商业计划书
- 2025嘉腾培训班学员培训合同
- 2025租房意向合同范本
- 2025国家助学贷款合同合同范本
- 2025年物业费收取合同协议书
- 2025保险箱租赁管理合同协议书
- 2025年1月浙江卷化学试题(解析版)
- 煤炭信息化知识培训总结课件
- 农村妇联会议记录范文
- 油田井下作业案例课件
- 项目管理范围管理及计划分解模板
- 2025秋教科版(2024)小学科学二年级上册(全册)课时练习及答案(附目录)
- 2025年中国工商银行校园招聘考试题库历年考试真题及答案
- 挺身式跳远技术
- 2025年香港销售合同范本
- 2024河北工勤人员技师考试汽车驾驶员自测试题及答案-河北职业
- 国有企业财会监督体系构建的路径选择与机制创新
评论
0/150
提交评论