C实验三继承和派生类_第1页
C实验三继承和派生类_第2页
C实验三继承和派生类_第3页
C实验三继承和派生类_第4页
C实验三继承和派生类_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、实验三 继承和派生类实验目的和要求1理解类的继承的概念,能够定义和使用类的继承关系。2掌握派生类的声明与定义方法。3熟悉公有派生和私有派生的访问特性。4学习虚基类在解决二义性问题中的作用。实验内容1.先阅读下面的程序,分析程序运行的结果,然后再上机运行程序,验证自己分析的 结果是否正确。(1)#includeclass Apublic:A()coutA:A() called.n;A()coutA:A() called.n;class B:public Apublic:B(int i)coutB:B() called.n;buf=new chari;B()delete buf;coutB:B()

2、 called.n;private:char *buf;void main()B b(10);#includeclass Apublic:A(int a,int b):x(a),y(b)coutA constructor.endl;void Add(int a,int b)x+=a;y+=b;void display()cout(x,y)endl;A()coutdestructor A.endl;private:;class B:private Aprivate:int i,j;A Aobj;public:B(int a,int b,int c,int d):A(a,b),i(c),j(d),

3、Aobj(1,1)coutB constructor.endl;void Add(int x1,int y1,int x2,int y2)A:Add(x1,y1);i+=x2;j+=y2;void display()A:display();Aobj.display();cout(i,j)endl;B()coutdestructor B.endl;void main()B b(1,2,3,4);b.display();b.Add(1,3,5,7);b.display();(3)#includeclass Apublic:A(int a):x(a)return +x;A()coutdestruct

4、or A.endl;private:int x;class B:public virtual Aprivate:int y;A Aobj;public:B(int a,int b,int c):A(a),y(c),Aobj(c)coutB constructor.yendl;A:f();Aobj.f();return +y;void display()coutA:f()tAobj.f()tf()endl;B()coutdestructor B.endl;class C:public Bpublic:C(int a,int b,int c):B(a,b,c),A(0);class D:publi

5、c C,virtual public Apublic:D(int a,int b,int c):C(a,b,c),A(c)coutD constructor.endl;D()coutdestructor D.endl;void main()D d(7,8,9);d.f();d.display();(4)#includeclass Base1public:Base1()coutclass Base1!endl;class Base2public:Base2()coutclass Base2!endl;class Level1:public Base2,virtual public Base1pu

6、blic:Level1();class Level2:public Base2,virtual public Base1public:Level2()coutclass Level2!endl;class TopLevel:public Level1,virtual public Level2public:TopLevel()coutclass TopLevel!endl;void main()TopLevel obj;2.调试下列程序,并对程序进行修改后再调试,指出调试中的出错原因。#include class Apublic:void seta(int i) a=i; int geta()

7、 return a; public:int a;class B:public Apublic:void setb(int i) b=i; int getb() return b; void show() / 语句 9 coutA:a=aendl;public:int b;void main()B bb;bb.seta(6);bb.setb(3);bb.show();coutA:a=bb.aendl;coutB:b=bb.bendl;coutA:a=bb.geta()endl;coutB:b=bb.getb()i* A .-. des iLriuic tu r A .-.Press ani/ k

8、ey to conLnue1. (4)3 D:E + * 电二4吐 uy虫i1 三 mmr. las:s r la&SCL lii lii; c lass class PressBascI*Lucl2fBiye2!Lcuell!TpLevel? anij key to continue(1)主函数中语句2、语句5、语句7出现错误。因为B采用私有继承,所以 A 中的公有函数在 B 中是变为私有函数,主函 数中不能访问 B 中的私有函数。( 2)主函数中语句 2、语句 5 、语句 7 出现错误。因为 B 采用 保护继承,所以 A 中的公有函数在 B 中是变为保护函数,主函 数中不能访问 B 中的保

9、护函数。(3)主函数中语句 9、语句 5 出现错误。 因为 B 采用公有继承, 所以 B 中和主函数中不能访问 A 中的私有函数。(4)主函数中语句 5 出现错误。因为 B 采用公有继承,所以 A 中保护成员在 B 中仍为保护成员, B 中可以访问 A 中的保护成 员,但不能通过类的对象访问类的保护成员。3.(1)#include class Myarrayprotected:int *alist;/ 指向动态申请的一组空间public:Myarray(int len)/ 初始化,动态申请存储空间alist=new intlen;length=len;Myarray() / 对象结束时,释放所

10、占用的存储空间delete(alist);coutendl 再见! endl;void Input() / 输入数据int i;for(i=0;ilength;i+)cout 输入数组的第 i+1alisti;coutn 数组的成员为: n;for(int i=0;ilength;i+)coutalisti ;coutendl;void main()Myarray A(3);A.Input();A.Display();#include class Myarrayprotected:int *alist; / 指向动态申请的一组空间public:Myarray(int len)/ 初始化,动态申

11、请存储空间alist=new intlen;length=len;coutMyarray初始化 .endl;Myarray() / 对象结束时,释放所占用的存储空间delete(alist);coutendl 再见! endl;void Input() / 输入数据int i;for(i=0;ilength;i+)cout 输入数组的第 i+1alisti;coutn 本数组成员依次为: n;for(int i=0;ilength;i+)coutalisti ;coutendl;class SortArray:virtual public Myarraypublic:SortArray(int

12、 n):Myarray(n)coutSortArray初始化 .endl;void sort()int i,j,k,temp;for(i=0;ilength-1;i+)k=i;if(alistjalistk)k=j;temp=alisti;alisti=alistk;alistk=temp;void main()SortArray B(4);B.Input();B.Display();endl;coutendl 现在将数组内成员进行从小到大排序:B.sort();B.Display();#include class Myarrayprotected:int *alist;/ 指向动态申请的一组

13、空间int length;/ 整数的个数public:Myarray(int len)/ 初始化,动态申请存储空间alist=new intlen;length=len;coutMyarray初始化 .endl;Myarray()/ 对象结束时,释放所占用的存储空间delete(alist);coutendl 再见! endl;void Input()/ 输入数据int i;个元素:n;cout 输入数组的第 i+1alisti;void Display() / 显示数据coutn 本数组成员依次为:for(int i=0;ilength;i+)coutalisti ;coutendl;cla

14、ss ReArray: virtual public Myarraypublic:ReArray(int n):Myarray(n)coutReArray初始化 .endl;void turn()int i,t,j=length-1;for(i=0;ilength/2;i+,j-)t=alisti;alisti=alistj;alistj=t;void main()ReArray B(4);B.Input();B.Display();endl;coutendl 现在将数组内成员进行前后逆转:B.turn();B.Display();#include class Myarrayprotected

15、:int *alist;/ 指向动态申请的一组空间int length;/ 整数的个数public:Myarray(int len)/ 初始化,动态申请存储空间alist=new intlen;length=len;coutMyarray初始化 .endl;Myarray()/ 对象结束时,释放所占用的存储空间delete(alist);coutendl 再见! endl;void Input()/ 输入数据int i;cout 输入数组的第 i+1alisti;void Display() / 显示数据coutn 本数组成员依次为: n;for(int i=0;ilength;i+)cout

16、alisti ;coutendl;class AverArray:virtual public Myarraypublic:AverArray(int n):Myarray(n)coutAverArray初始化 .endl;float getaver()float aver;int sum=0,i;for(i=0;ilength;i+)sum+=alisti;aver=(float)sum/length;return aver;void main()AverArray B(3);B.Input();B.Display();coutendl 数组内成员的平均值为:coutB.getaver()

17、endl;(5)#include class Myarrayprotected:int *alist;/ 指向动态申请的一组空间int length;/ 整数的个数public:Myarray(int len)/ 初始化,动态申请存储空间alist=new intlen;length=len;coutMyarray初始化 .endl;Myarray()/ 对象结束时,释放所占用的存储空间delete(alist);coutendl 再见! endl;void Input()/ 输入数据int i;for(i=0;ilength;i+)cout 输入数组的第 i+1alisti;void Dis

18、play() / 显示数据coutendl 本数组成员依次为: ; for(int i=0;ilength;i+)coutalisti ;coutendl;class SortArray:virtual public Myarray /从小到大排序public:SortArray(int n):Myarray(n)coutSortArray初始化 .endl;void get_SortArray()int i,j,k,temp;for(i=0;ilength-1;i+)k=i;for(j=i+1;jlength;j+)if(alistjalistk)k=j;temp=alisti;alisti

19、=alistk;alistk=temp;class ReArray: virtual public Myarray/ 前后逆转public:ReArray(int n):Myarray(n)coutReArray初始化 .endl;void get_ReArray()int i,t,j=length-1;for(i=0;ilength/2;i+,j-)t=alisti;alisti=alistj;alistj=t;class AverArray:virtual public Myarray/ 求平均值public:AverArray(int n):Myarray(n)coutAverArray初始化 .endl;float get_AverArray()float aver;int sum=0,i;for

温馨提示

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

评论

0/150

提交评论