ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:85.28KB ,
资源ID:3674643      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3674643.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C实验三继承和派生类附答案解析.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C实验三继承和派生类附答案解析.docx

1、C实验三继承和派生类附答案解析实验三 继承和派生类实验目的和要求 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 ch

2、ari; B() delete buf; coutB:B() called.n; private: char *buf;void main() B b(10);(2)#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: int x,y;class B:private Aprivate: int i,j; A

3、Aobj;public: B(int a,int b,int c,int d):A(a,b),i(c),j(d),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

4、.display();(3)#includeclass Apublic: A(int a):x(a) coutA constructor.xendl; int f() return +x; A() coutdestructor 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; int f() A:f(); Aobj.f(); return +y; void dis

5、play() 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) coutC constructor.endl; ;class D:public 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

6、.f(); d.display();(4)#includeclass Base1public: Base1() coutclass Base1!endl; ;class Base2public: Base2() coutclass Base2!endl; ;class Level1:public Base2,virtual public Base1public: Level1() coutclass Level1!endl; ;class Level2:public Base2,virtual public Base1public: Level2() coutclass Level2!endl

7、; ;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() return a; public: int a;class B:public Apublic: void setb(int i) b=i; int getb() return

8、 b; void show() coutA:a=aendl; /语句9public: int b;void main() B bb; /语句1 bb.seta(6); /语句2 bb.setb(3); /语句3 bb.show(); /语句4 coutA:a=bb.aendl; /语句5 coutB:b=bb.bendl; /语句6 coutA:a=bb.geta()endl; /语句7 coutB:b=bb.getb()endl; /语句8按下列要求对程序进行修改,然后调试,对出现的错误分析其原因。(1)将派生类B的继承方式改为private时,会出现哪些错误和不正常现象?为什么?(2)将派

9、生类B的继承方式改为protected时,会出现哪些错误和不正常现象?为什么?(3)将派生类B的继承方式恢复为public后,再将类A中数据成员a的访问权限改为private时,会出现哪些错误和不正常现象?为什么?(4)派生类B的继承方式仍为public,将类A中数据成员a的访问权限改为protected时,会出现哪些错误和不正常现象?为什么? 3.定义一个类MyArray,类中可以存放一组整数。类的定义如下: class MyArray public: MyArray(int len); /初始化,动态申请存储空间 MyArray(); /对象结束时,释放所占用的存储空间 void Inpu

10、t(); /输入数据 void Display(); /显示数据 protected: int *alist; /指向动态申请的一组空间 int length; /整数的个数 ; 基类中有构造函数、析构函数、输入数据和输出数据的函数。 (1)实现该类并设计主函数对所定义的类进行调试。下同。(2)由MyArray派生一个类SortArray,在该类中定义函数实现排序功能。(3)由MyArray派生一个类ReArray,在该类中定义函数实现数据前后逆转功能。(4)由MyArray派生一个类AverArray,在该类中定义函数Aver求解类中所有数据的平均值。(5)定义NewArray类,同时继承了

11、SortArray, ReArray和AverArray,使得NewArray类的对象同时具有排序、逆转和求平均值的功能。在继承的过程中声明为虚基类,体会虚基类在解决二义性问题中的作用。参考答案(非权威,仅仅是我自己的理解,如有错误,欢迎批评指正!)1.(1)1.(2)1.(3)1.(4)2.(1)主函数中语句2、语句5、语句7出现错误。因为B采用私有继承,所以A中的公有函数在B中是变为私有函数,主函数中不能访问B中的私有函数。(2)主函数中语句2、语句5、语句7出现错误。因为B采用保护继承,所以A中的公有函数在B中是变为保护函数,主函数中不能访问B中的保护函数。(3)主函数中语句9、语句5出

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

13、); coutendl再见!endl; void Input() /输入数据 int i; for(i=0;ilength;i+) cout输入数组的第i+1alisti; void Display() /显示数据 coutn数组的成员为:n; for(int i=0;ilength;i+) coutalisti ; coutendl; ;void main() Myarray A(3); A.Input(); A.Display();(2)#include class Myarrayprotected: int *alist; /指向动态申请的一组空间 int length; /整数的个数p

14、ublic: 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 Display() /显示数据 coutn本数组成员依次为:n; for(int i=0;ilength;i+) coutalisti ; coutendl

15、; ;class SortArray:virtual public Myarraypublic: SortArray(int n):Myarray(n) coutSortArray 初始化.endl; void sort() 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=alistk; alistk=temp; ;void main() SortArray B(4); B.Input(); B.Display(); couten

16、dl现在将数组内成员进行从小到大排序:endl; B.sort(); B.Display();(3)#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

17、i; for(i=0;ilength;i+) cout输入数组的第i+1alisti; void Display() /显示数据 coutn本数组成员依次为:n; for(int i=0;ilength;i+) coutalisti ; coutendl; ;class 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=ali

18、stj; alistj=t; ;void main() ReArray B(4); B.Input(); B.Display(); coutendl现在将数组内成员进行前后逆转:endl; B.turn(); B.Display();(4)#include class Myarrayprotected: int *alist; /指向动态申请的一组空间 int length; /整数的个数public: Myarray(int len) /初始化,动态申请存储空间 alist=new intlen; length=len; coutMyarray 初始化.endl; Myarray() /对象

19、结束时,释放所占用的存储空间 delete(alist); coutendl再见!endl; void Input() /输入数据 int i; for(i=0;ilength;i+) cout输入数组的第i+1alisti; void Display() /显示数据 coutn本数组成员依次为:n; for(int i=0;ilength;i+) coutalisti ; coutendl; ;class AverArray:virtual public Myarraypublic: AverArray(int n):Myarray(n) coutAverArray 初始化.endl; fl

20、oat 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() endl;(5)#include class Myarrayprotected: int *alist; /指向动态申请的一组空间 int length; /整数的个数public: Myarray(i

21、nt 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 Display() /显示数据 coutendl本数组成员依次为:; for(int i=0;ilength;i+) coutalisti ; coutendl; ;class SortA

22、rray: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=alistk; alistk=temp; ;class ReArray: virtual public Myarray /前后逆转public: ReAr

23、ray(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(i=0;ilength;i+) sum+=alisti; aver=(float)sum/length; return aver; ;class NewArray:public SortArray,public ReArray,public AverArraypublic: NewArray(int

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1