您好,欢迎访问三七文档
实验目的与要求:1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。2.掌握派生类构造函数初始化基类成员和对象成员的方法。3.掌握内联函数和默认函数。4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。实验过程及内容:1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在派生类中访问基类成员。①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。编程测试所定义的类体系。本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。2.实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。要求计算圆柱的底面积、侧面积、全面积和体积。请编写所有完整的成员函数,并编写主函数进行验证。数据处理1.(1)(2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。(3)在Line类中添加两个数据成员。2.#includeiostream#includecmathusingnamespacestd;#definePI3.14159classPoint{friendclassLine;protected:doublex,y;public:Point(){x=0;y=0;}Point(doublexv,doubleyv){x=xv;y=yv;}doubleArea(){return0;}voidShow(){coutx=x''y=yendl;}};classCircle:publicPoint{protected:doubleradius;public:Circle(){x=0;y=0;radius=0;}Circle(doublexv,doubleyv,doublevv):Point(xv,yv){//调用基类构造函数radius=vv;}Circle(Circle&cir):Point(cir){//按赋值兼容规则cir可为Point实参radius=cir.radius;}Circle&operator=(Circle&cir){this-Point::operator=(cir);//在派生类中定义重载的拷贝赋值操作符有固定的标准格式radius=cir.radius;return*this;}doubleArea(){returnPI*radius*radius;}voidShow()coutx=x''y=yradius=radiusendl;//访问基类的数据成员}};classCylinder:publicCircle{doublehigh;public:Cylinder(){x=0;y=0;radius=0;high=0;}Cylinder(doublexv,doubleyv,doublevv,doublekv):Circle(xv,yv,vv){//调用基类构造函数high=kv;}Cylinder(Cylinder&cyl):Circle(cyl){//按赋值兼容规则cyl可为Cylinder实参high=cyl.high;}Cylinder&operator=(Cylinder&cyl){this-Circle::operator=(cyl);//在派生类中定义重载的拷贝赋值操作符有固定的标准格式high=cyl.high;return*this;}doubleceArea(){return2*PI*radius*high;}doublequArea(){returnceArea()+2*Area();}doublevolume(){returnArea()*high;}voidShow(){coutx=x''y=y''radius=radius''high=highendl;//访问基类的数据成员};classLine{Pointstart,end;//对象成员public:Line(){}//对象成员初始化Line(doublexv1,doubleyv1,doublexv2,doubleyv2):start(xv1,yv1),end(xv2,yv2){}doubleGetLength(){returnsqrt((start.x-end.x)*(start.x-end.x)+(start.y-end.y)*(start.y-end.y));}doubleArea(){return0;}voidShow(){coutstartpoint:\n;start.Show();coutendpoint:\n;end.Show();}};intmain(){Pointpt(0,0);Circlecl1(100,100,10),cl2(cl1),cl3;Cylinderh1(50,50,20,30),h2(h1),h3;Lineln1(0,0,100,100),ln2;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();couth1底面积:h1.Area()endl;couth1侧面积:h1.ceArea()endl;couth1全面积:h1.quArea()endl;couth1体积:h1.volume()endl;h1.Show();couth2底面积:h2.Area()endl;couth2侧面积:h2.ceArea()endl;couth2全面积:h2.quArea()endl;couth2体积:h2.volume()endl;h2.Show();h3=h1;couth3底面积:h3.Area()endl;couth3侧面积:h3.ceArea()endl;couth3全面积:h3.quArea()endl;couth3体积:h3.volume()endl;h3.Show();cout线面积:ln1.Area()'\t'线长度:ln1.GetLength()endl;ln1.Show();ln2.Show();return0;}实验结论:通过这次实验,我对类的继承和派生,派生类构造函数初始化基类成员和对象成员的方法,以及赋值兼容原则有了更深的理解。指导教师批阅意见:成绩评定:指导教师签字:年月日备注:注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
本文标题:继承和派生实验报告
链接地址:https://www.777doc.com/doc-7351644 .html