C++继承性-湖南科技学院综合性实验指导书_第1页
C++继承性-湖南科技学院综合性实验指导书_第2页
C++继承性-湖南科技学院综合性实验指导书_第3页
C++继承性-湖南科技学院综合性实验指导书_第4页
C++继承性-湖南科技学院综合性实验指导书_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

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

文档简介

1、湖南科技学院综合性实验指导书实验名称:类的继承性实验项目性质:综合所涉及课程:C+面向对象程序设计计划学时:6学时一、实验目的继承性是C+等面向对象程序设计的三大基本特征之一,通过综合性的实验设计,首先让同学们了解派生类的定义,理解代码重用的基本原理,然后通过类型兼容规则学会“赋值兼容性”,其次通过派生类构造函数的设计,了解派生类数据的初始化的形式,最后学会如何解决派生类成员的二义性访问问题。通过综设实验对类的“isA”关系做个整体建构。培养目标(1)通过本次实验,希望同学们能够在理解类的封装机制的基础上,掌握继承性可实现重用程序代码的优势;(2)熟练掌握类的三种继承权限对基类成员的吸收和访问

2、属性改造;(3)学会设计类的类型兼容规则;(4)学会设计类的构造函数和析构函数;(5)学会解决派生类成员的访问二义性问题(类作用域标识和虚基类)。二、实验内容综合实验内容:二选一或自拟题目(1)设计雇员类(组合类),内嵌生日属性,对公司雇员进行薪水等管理。(2)设计储蓄账户类,对用户个人银行账户进行管理。实验说明:类的封装性综设实验分3次实验(任务)完成,每次实验2课时,完成类的声明、定义和测试。任务一:类和对象,包含类的数据成员的定义、类的成员函数的定义;任务二:构造函数和析构函数,关于类的构造函数和析构函数的设计和测试;任务三:类的组合,主要关于组合类测试。1、派生类和对象(参考资料:见第

3、7章讲义)一一5.21.2015演示:点类(Point)和圆类(Circle)(1)设计点类,再定义圆类(继承点类),要求输出圆的圆心位置和半径。任务(或自拟题目)(1)设计点类,再定义圆类(继承点类),要求输出圆的圆心位置和半径。改变不同的继承权限,并总结不同继承权限对派生类设计的影响。设计要点(1)基类数据的访问属性的设置protected:intx,y;思考:若把访问属性改为私有,派生类的设计有什么不同?(2)基类数据的传入方法(未使用构造函数的情况下)voidsetXY(intx,inty)this->x=x;this->y=y;(3)派生类的设计classCircle:p

4、ublicPointintradius;/x,y直接继承实现圆心坐标+半径若把继承权限改为私有或保护,派生类的设计有什么不同?(4)派生类的测试voidmain()公有继承可使用基类继承过来的接口Circlec;派生失对象c.setXYR(0,0,2);c.print();程序参考代码:#include<iostream>usingnamespacestd;classPointprotected:intx,y;public:voidsetXY(intx,inty)this->x=x;this->y=y;voidprint()cout<<"坐标位置:

5、("<<x<<,'<<y<<')'<<endl;classCircle:publicPointintradius;x,ypublic:voidsetXYR(intx,inty,intr)radius=r;setXY(x,y);)voidprint()(cout<<"圆心位置:("<<x<<','<<y<<')'<<endl;cout<<"半径:"&

6、lt;<radius<<endl;);voidmain()(Circlec;派生类对象c.setXYR(0,0,2);c.print();)(2)设计长方形类,再设计长方体类,并能够求解长方体的体积。设计要点基类数据的传入方法(长和宽相等的数据传入方法)voidsetA(inta)length=width=a;)程序参考代码:#include<iostream>usingnamespacestd;classRectangleprotected:intlength,width;public:voidsetLW(intl,intw)length=l,width=w;)

7、voidshowArea()cout<<length*width<<endl;)classSquare:publicRectanglepublic:voidsetA(inta)length=width=a;);voidmain()Squaresq;派生类对象sq.setA(2);sq.showArea();)拓展设计长方形类,再设计正方形类,并能够求解长方形和正方形的面积。程序参考代码:2、派生类构造函数和析构函数(参考资料:见第7章讲义)一一5.28.2015演示:点类(Point)和圆类(Circle)(1)设计点类,再定义圆类(继承点类),要求输出圆的圆心位置和半

8、径。其他要求如下:设计构造函数和析构函数,并能够观察它们的调用情况;设计main程序,创造条件,实现类型兼容规则。设计要点(1)基类数据的访问属性的设置protected:intx,y;(2)基类构造函数的设计Point(intx,inty):x(x),y(y)cout<<"Point"<<endl;)(3)派生类构造函数的设计Circle(intx,inty,intr):Point(x,y)radius=r;cout<<"Circle"<<endl;)(4)类型兼容规则设计的设计类型兼容规则使用条件:(1

9、)公有继承;classCirclepublicPoint;(2)统一接口(两个类中都有设计);voidprint();(3)基类指针和派生类对象,并通过基类指针统一接口。voidfun(Point*ptr)ptr->print();程序参考代码:#include<iostream>usingnamespacestd;classPointprotected:intx,y;public:Point(intx,inty):x(x),y(y)cout<<"Point"<<endl;Point()cout<<"Point

10、"<<endl;voidprint()cout<<"坐标位置:("<<x<<,'<<y<<')'<<endl;classCircle:publicPointintradius;x,ypublic:Circle(intx,inty,intr):Point(x,y)radius=r;cout<<"Circle"<<endl;Circle()cout<<"Circle"<<en

11、dl;voidprint()cout<<"圆心位置:("<<x<<,'<<y<<')'<<endl;cout<<"半径:"<<radius<<endl;voidfun(Point*ptr)ptr->print();voidmain()(Circlec(0,0,2);派生类对象c.print();fun(&c);)任务(或自拟题目)(1)设计长方形类,再设计正方形类,并能够求解长方形和正方形的面积。其他要求如下:

12、设计构造函数和析构函数,并能够观察它们的调用情况;设计main程序,创造条件,实现类型兼容规则。设计要点(1)基类数据的访问属性的设置protected:intlength,width;(2)基类构造函数的设计Rectangle(intl,intw):length(l),width(w)(3)派生类构造函数的设计(如何实现长和宽的等值输入是重点)Square(inta):Rectangle(a,a)cout<<"Square"<<endl;(4)类型兼容规则设计的设计类型兼容规则使用条件:(1)公有继承;classSquare:publicRecta

13、ngle;(2)统一接口(两个类中都有设计);voidgetArea();(3)基类指针和派生类对象,并通过基类指针统一接口。voidfun(Rectangle*ptr)ptr->getArea();程序参考代码:#include<iostream>usingnamespacestd;classRectangleprotected:intlength,width;public:Rectangle(intl,intw):length(l),width(w)cout<<"Rectangle"<<endl;)Rectangle()cout

14、<<"Rectangle"<<endl;voidgetArea()cout<<"长方形面积:"<<length*width<<endl;classSquarepublicRectanglepublic:Square(inta):Rectangle(a,a)cout<<"Square"<<endl;Square()cout<<"Square"<<endl;voidgetArea()cout<<&qu

15、ot;正方形面积:"<<length*width<<endl;voidfun(Rectangle*ptr)ptr->getArea();voidmain()Squaresq(2);派生类对象sq.getArea();fun(&sq);拓展设计长方形类,再设计正方形类,在构造函数重载的条件下,重新设计主程序进行测试。程序参考代码略6.4.20153、派生类成员的标识和访问(参考资料:见第7章讲义)任务1:请补充如下程序,使程序的输出结果为:6,12。classbaseintm;public:base(intk)m=k;intgetvalue()re

16、turnm;classderived:publicbaseintn;public:derived(intk):base(k-1)n=k;intgetvalue()return;voidmain()derivedd1(3),d2=4;cout<<d1.getvalue()<<","<<d2.getvalue();注意:当派生类有和基类同名成员的时候,如何访问基类中被隐藏掉的成员,通过类名:修饰即可。例:intgetvalue()returnbase:getvalue();任务2请设计A类,公有派生B1和B2类,然后B1和B2类共同派生C类,

17、其它要求如下:(1) A有数据成员:inta;(2) B1和B2类各有数据成员:intb1;intb2;(3)使用虚基类解决成员冗余问题;(4)设计主程序。程序参考代码:#include<iostream>usingnamespacestd;classAprotected:inta;public:A(inta):a(a)cout<<"A"<<endl;);classB1:virtualpublicAprotected:intb1;public:B1(inta,intb1):A(a),b1(b1)cout<<"B1&q

18、uot;<<endl;classB2:virtualpublicAprotected:intb2;public:B2(inta,intb2):A(a),b2(b2)cout<<"B2"<<endl;classC:publicB1,publicB2protected:intc;public:C(inta,intb1,intb2,intc):A(a),B1(a,b1),B2(a,b2),c(c)cout<<"C"<<endl;voidmain()Cc(1,2,3,4);(知识拓展)声明一个基类Sha

19、pe(几何形状),基类Shape的声明如下:classShapepublic:Shape()Shape()floatGetArea()return-1;实验参考代码:classShapepublic:Shape()Shape()floatGetArea()return-1;classCircle:publicShapeintradius;public:Circle(intr=1)radius=r;Circle()floatGetArea()return3.14*radius*radius;classRectangle:publicShapeintlength,width;public:Rectangle(intl=2,intw=1)length=l,width=w;floatGetArea()returnlength*width;classSquare:publicRectanglepublic:Square(inta=2):

温馨提示

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

评论

0/150

提交评论