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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

第12章继承与派生主观题目和客观题目林华.docx

1、第12章继承与派生主观题目和客观题目林华一、继承与派生的编程题:1、Box类包含三个私有数据成员a(立方体边长)、volume(体积)和area(表面积),另有两个构造函数以及seta()(设置立方体边长)、getvolume()(计算体积)、getarea(计算表面积)和disp(输出结果)。请声明并实现该类,并写出主函数进行测试,长方体的参数要求从键盘输入,并输出其表面积和体积。 2、设计一个长方形类(Rectangle),包含两个私有的数据成员length,width,要求能求其面积;再从Rectangle派出一个长方体(Volume),要求能求其体积。请声明并实现这两个类,并在主函数中

2、分别定义这两个类的对象,并打印出相应的面积和体积。 3、定义一个物体基类object,有数据成员重量weight,有构造函数对数据成员weight进行初始化,有成员函数打印重量信息PrintWeight。从object类派生出盒子类box,增加数据成员高度heigh和宽度width,并定义派生类box类的构造函数对数据成员weight、height、width进行初始化,有成员函数PrintAll打印数据成员weight、height、width值。在主函数中创建一个box对象,并初始化其所有数据成员,调用成员函数将weight、height、width值信息显示。4、自行车(Bicycle)

3、和汽车(Motorcar)都是车辆(Vehicle),它们有共同的属性最大速度(maxSpeed)和重量(weight),也有各自不同的特性,比如自行车的高度(height)和汽车的座位数(seatNum)。现有车辆若干(设N=3),将其输入并放入一个指针数组,每个车辆需要设置其属性。输入后分类显示各自属性(即自行车和汽车分别显示各自属性)。5、定义Point作为基类,在此基础上派生出圆Circle类,该类含有计算面积的成员函数,并由Circle类派生出圆柱Cylinder类,该类含有计算柱体的表面积和体积的成员函数。6、编写程序定义人员类Person作为基类,其数据成员为姓名和身份号,在此基

4、础上派生出职员Employee类,该类的数据成员为底薪和工作年数,含有实现相关信息输入和输出的成员函数以及计算并显示奖金和月薪的成员函数。计算办法:奖金=10*工作年数,月薪=底薪+奖金。二、根据下列代码,写出派生类B所含的成员及成员的访问控制属性1、根据下列代码,写出派生类B所含的成员及成员的访问控制属性class Aprivate: int a;protected: int b;public: A(int a1=0,int b1=0)a=a1;b=b1int getA_a()return a; int getA_b()return b; ;class B : public Aprivate

5、: int d;protected: int e;public: B(int d1=0,int e1=0)d=d1;e=e1int getB_d()return d; int getB_e()return e; ;2、根据下列代码,写出派生类B所含的成员及成员的访问控制属性class Aprivate: int a;protected: int b;public: A(int a1=0,int b1=0)a=a1;b=b1int getA_a()return a; int getA_b()return b; ;class B : portected Aprivate: int d;protec

6、ted: int e;public: B(int d1=0,int e1=0)d=d1;e=e1int getB_d()return d; int getB_e()return e; ;3、根据下列代码,写出派生类Y所含的成员及成员的访问控制属性class BASEpublic: BASE() i=1; j=2; xtemp=3; void get_xtemp() get_ij(); cout(BASE)xtemp=xtempendl; protected: int i, j; void get_ij() cout(BASE)i=iendl; cout(BASE)j=jendl; privat

7、e: int xtemp;class Y: public BASE public: Y() k=4; xtemp=5; void get_temp() cout(Y)i=iendl; cout(Y)j=jendl; cout (Y)k=kendl;cout(Y)xtemp=xtempendl; get_ij(); protected: double k; void get_xtemp() coutget_xtemp() in Yendl; private: double xtemp; ;4、根据下列代码,写出派生类Y所含的成员及成员的访问控制属性class BASEpublic: BASE()

8、 i=1; j=2; xtemp=3; void get_xtemp() get_ij(); cout(BASE)xtemp=xtempendl; protected: int i, j; void get_ij() cout(BASE)i=iendl; cout(BASE)j=jendl; private: int xtemp;class Y: protected BASE public: Y() k=4; xtemp=5; void get_temp() cout(Y)i=iendl; cout(Y)j=jendl; cout (Y)k=kendl;cout(Y)xtemp=xtempen

9、dl; get_ij(); protected: double k; void get_xtemp() coutget_xtemp() in Yendl; private: double xtemp; ;5、根据下列代码,写出派生类B所含的成员及成员的访问控制属性class A private: int ax;protected: int ay;public: int az; int Getax( )return ax; void Setax( int x ) ax = x; ;class B: public A private: int bx;protected: int by;public

10、: int bz; int Getbz( )return bz; ; void Setbz( int z )bz=z; ;6、根据下列代码,写出派生类B所含的成员及成员的访问控制属性class A private: int ax;protected: int ay;public: int az; int Getax( )return ax; void Setax( int x ) ax = x; ;class B: protected A private: int bx;protected: int by;public: int bz; int Getbz( )return bz; ; voi

11、d Setbz( int z )bz=z; ;三、填空题1、如果类继承了类,则类称为 (1) 类,而类称为 (2) 类。 (3) 类的对象可作为 (4) 类的对象处理,反过来不行,因为 (5) 。如果强制转换则要注意 (6) 。答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类2、当用public继承从基类派生一个类时,基类的public成员成为派生类的 (1) 成员,protected成员成为派生类的 (2) 成员,对private成员是 (3) 。公有派生可以使其类的 (4) ,所以公有派生是主流。答案:(1)public成员(2)pr

12、otected成员(3)不可访问(4)接口不变3、利用继承能够实现 (1) 。这种实现缩短了程序开发的时间,VC+中的 (2) 很好地体现了这一点。答案:(1)代码的复用(2)MFC编程4、一个派生类只有一个直接基类的情况称为 (1) ,而有多个直接基类的情况称为(2) 。继承体现了类的 (3) 概念,这在MFC中得到了很好表现,MFC中只采用了 (4) 。答案:(1)单继承/单一继承(2)多继承/多重继承(3)层次(4)单继承/单一继承5、生成一个派生类对象时,先调用 (1) 的构造函数,然后调用 (2) 的构造函数。答案:(1)基类/虚基类 (2)派生类6、继承发生在利用已有类派生新类时,

13、其中 (1) 称为基类,或 (2) 类; (3) 称为派生类,或 (4) 类。答案:(1)已有类 (2)父 (3)新类 (4)子7、在公有继承关系下,派生类的对象可以访问基类中的 (1) 成员,派生类的成员函数可以访问基类中的 (2) 成员。答案:(1)公有/public (2)公有和保护/public and protected8、在保护继承关系下,基类的公有成员和保护成员将成为派生类中的 (1) 成员,它们只能由派生类的 (2) 来访问;基类的私有成员将成为派生类中的 (3) 成员。答案:(1)保护成员/protected (2)成员函数 (3)不可访问四、简答题1、构造函数和析构函数可以

14、继承吗?派生类构造函数各部分的执行次序是怎样的?答:构造函数和析构函数不可以继承。派生类构造函数各部分的执行次序是:1. 调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。2. 调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。3. 派生类的构造函数体中的操作。2、派生类的析构函数中需完成什么任务?是否要编写对基数和成员对象的析构函数的调用?为什么?答:析构函数的功能用于撤销该对象时做清理工作,析构函数无返回类型也没有参数,情况比较简单。派生类析构函数定义格式与非派生类无任何差异,不要编写对基数和成员对象的析构函数的调用,只要在函数体内把派生类新增一般成员处理好就可

15、以了,因为对新增的成员对象和基类的善后工作,系统会自己调用成员对象和基类的析构函数来完成。3、为什么要使用虚基类?怎样定义虚基类? 答:在多重继承是有可能出现同一基类的两个拷贝,为避免这种情况,可使用虚基类。虚基类(virtual base class)定义方式如下:class 派生类名:virtual 访问限定符 基类类名.;class 派生类名:访问限定符 virtual 基类类名.;4、比较类的三种继承方式public(公有继承)、protected(保护继承)、private(私有继承)之间的差别。答:继承方式决定了基类中的成员在派生类中的属性。三种继承方式的共同点:基类的privat

16、e成员在派生类中不可见。区别:对于私有继承,基类的public,protected成员在派生类中作为private成员;对于公有继承,基类的public,protected成员在派生类中访问属性不变;对于保护继承,基类的public,protected成员在派生类中作为protected成员。5、简单叙述派生类与基类的赋值兼容规则。答:凡是基类所能解决的问题,公有派生类都可以解决。在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规则称赋值兼容规则。它包括以下情况:1 派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的成员赋值给基类对象。反过来不行,因为派生类

17、的新成员无值可赋。2 可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的成员,不能访问派生类中的新成员。同样也不能反过来做。派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的成员。6、什么是派生类与基类的赋值兼容规则?答:派生类与基类的赋值兼容规则:可以将公有派生类对象赋值给基类对象,反之是不允许的。五、阅读程序,分析类间关系及写出执行结果:1、写出下面程序的输出#include class base int n;public: base(); base (int a) cout constructing ba

18、se class endl; n=a; cout n= n endl; base() cout destructing base class endl; ;class subs : public base int m;public: subs(int a, int b) : base(a) cout constructing sub class endl; m=b; cout m= m endl; subs() cout destructing sub class endl; ;void main () subs s(1,2);答: 这里base 是基类,subs为派生类,subs类的构造函数

19、中含有调用基本类的构造函数。所以输出为: constructing base class n=1 constructing sub class n=2 destructing base class destructing sub class2、写出下面程序的输出#include class A int a;public: A(int i) a=i;cout constructing class A endl; void print() cout a endl; A() cout destructing class A endl; ;class Bi:public A int bl;public

20、: Bl(int i,int j):A(i) bl=j;cout constructing class BI endl; void print() A:print (); cout bl endl; BI() cout destructing class BI endl; ;class B2:public A int b2;public: B2(int i,int j):A(i); b2=j;cout constructing class B2 endl; void print() A:print (); cout b2 endl; B2() cout destructing class B2

21、 endl; ;class C:public B1,public B2 int c;public: C(int i,int j,int k, int 1,int m) :Bl(i,j),B2(k,1),c(m) cout constructing class C endl; void print() Bl:print(); B2:print(); cout c endl; C( ) cout destructing class C endl; ;void main() C c1(1,2,3,4,5); cl.print();答: C类是从B1类和B2类派生的,而B1和B2类又都是从A类派生,但

22、各有自己的副本,所有这些成员函数均有print()成员函数。所以,在C的成员函数实现中,调用print()时,要加上类作用域运算符“:”。所以输出为:constructing class Aconstructing class B1constructing class Aconstructing class B2constructing class C12345destructing class Cdestructing class B2destructing class Adestructing class B1destructing class A3、写出下面程序的输出#include c

23、lass Apublic: A(char *s) cout s endl; A() ;class B:public Apublic: B(char *sl,char *s2) :A(sl) cout s2 endl; ;class C:public Apublic: C(char *sl,char *s2) :A(sl) cout s2 endl; ;class D:public B,public Cpublic: D(char *sl,char *s2,char *s3,char *s4) :B(sl,s2),C(sl,s3) cout s4 endl; void main () D d(c

24、lass A,class B,class C,class D);答: D类是从B和C类派生的,而B和C类又都是从A类派生,但各有自己的副本。所以输出为:class Aclass Bclass Aclass Cclass D4、写出下面程序的输出#include class Apublic: A()coutnThis is A class.n;class Bpublic: B()coutThis is B class.n; ;class derivedA:public B,virtual public A public: derivedA()coutThis is derivedA class.

25、n; ;class derivedB: public B,virtual public A public: derivedB()coutThis is derivedB class.n; ;class Derived: public derivedA, virtual public derivedB public: Derived()coutThis is Derived class.n; ;int main() Derived obj; return 1;答:derivedA类和derivedB类都是从虚基类A和基类B派生的,而Derived类又从derivedA类和虚基类derivedB派

26、生,但各有自己的副本。所以输出为:This is A class.This is B class.This is derivedB class.This is B class.This is derivedA class.This is Derived class.5、写出下面程序的输出#include class Base int i; public: Base(int n)cout Constucting base class endl;i=n; Base()cout Destructing base class endl; void showi()cout i ,; int Geti()return i; ;class Derived:public Base int j; Base aa; public: Derived(int n,int m,int p):Base(m),aa(p) cout Constructing derived class endl; j=n; Derived()cout Destructing derived classendl; void show()Base:showi(); cout j, aa.Geti() endl; ;void main() Deri

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

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