实验十六 继承和派生的基本概念.doc_第1页
实验十六 继承和派生的基本概念.doc_第2页
实验十六 继承和派生的基本概念.doc_第3页
实验十六 继承和派生的基本概念.doc_第4页
实验十六 继承和派生的基本概念.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验十六 继承和派生的基本概念一、 实验目的继承与派生是面向对象的特性,是面向对象程序设计模拟客观世界的手段之一,本实验的内容包括介绍MFC基础类的派生关系,通过实验要求掌握以下内容。1 掌握类继承与派生关系以及实现方法,理解类的层次结构。2 掌握派生类构造函数初始化基类成员和对象成员的方法。3 掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。 二、 实验内容1范例:定义一个继承与派生关系的类体系,在派生类中访问基类成员。先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生方式。编程测试所定义的类体系。【程序】 #include #include using namespace std;#define pi 3.14159class 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=radiusendl;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);cout点面积:pt.area()endl;pt.show();coutcl1圆面积:cl1.area()endl;cl1.show();coutcl2圆面积:cl2.area()endl;cl2.show();cl3=cl1;coutcl3圆面积:cl3.area()endl;cl3.show();cout线面积:ln1.area()t线长度:ln1.getlength()endl;ln1.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;#define pi 3.14159class 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=radiusendl;class cylinder:public circle double radius; double high;public: cylinder() x=0; y=0; radius=0; high=0; cylinder(double xv,double yv,double vv,double hv):circle( xv, yv, hv) high=hv; radius=vv;double areabottom()return 2*pi*radius*radius;double areace()return 2*pi*radius*high;double areaquan()return(areace()+areabottom();double v()return areabottom()*high/2; void Show() coutx=x y=y radius=radius high=highendl; ; int main()point pt(0,0);circle cl1(100,100,10);cylinder cy1(100,100,10,8);cout点面积:pt.area()endl;pt.show();coutcl1圆面积:cl1.area()endl;cl1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论