C++网络作业5答案_第1页
C++网络作业5答案_第2页
C++网络作业5答案_第3页
C++网络作业5答案_第4页
C++网络作业5答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、一、 选择题1. C+语言建立类族是通过_实现的。C A)类的嵌套 B)虚函数 C)类的继承 D)抽象类2. C+中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过_派生出新的类。B A)复用 B)继承 C)封装 D)引用3. 继承具有_,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。B A)规律性 B)传递性 C) 重复性 D)多样性在一个类的派生类中,其成员有两部分构成:一部分是从基类继承得到的,另一部分是自己定义的新成员。当基类本身也是一个派生类时,它必然包含了它的直接基类的成员,这些成员相应地也存在于该基类的派生类中。因此,

2、继承是具有传递性的。4. _A_提供了类对外部的接口, _B _是类的内部实现,而_D _不允许外界访问,但允许派生类的成员访问,这样既有一定的隐藏能力,又提供了开放的接口。 A)公有成员 B)私有成员 C)私有成员函数 D)保护成员5. 下列对基类和派生类关系的描述中,错误的是_。B A)派生类是基类的具体化 B)派生类是基类的子集 C)派生类是基类定义的延续D)派生类是基类的组合派生类包含基类中的成员,它是对基类定义的扩充和延续,是对基类定义的进一步具体化,而不是基类的子集。6 下列对派生类的描述中,错误的是_。D A)一个派生类可以作为另一个派生类的基类 B)派生类至少有一个基类 C)派

3、生类的缺省继承方式是private D)派生类只继承了基类的公有成员和保护成员 /继承了基类的所有成员7. 下列关于继承的描述中,错误的是_。D A)析构函数不能被继承 B)派生类是基类的组合C)派生类的成员除了它自己的成员外,还包含了它的基类的成员D)派生类中继承的基类成员的访问权限到派生类保持不变派生类不能继承基类的构造函数和析构函数,也不能访问基类的私有成员,而对基类的公有成员和保护成员的访问权限随着派生类对基类的继承方式而改变。8. 派生可以分为_A _和_C _。由_得到的派生类,其基类的所有公有成员都只能成为它的私有成员,这些私有成员只能被派生类的成员函数访问,而_B _无权访问;

4、由_得到的派生类,其基类中所有公有成员在派生类中也都是公有的。 A)公有派生 B)派生类的实例C)私有派生 D)派生类的构造函数对于公有继承方式: 基类成员对其对象的可见性 与一般类及其对象的可见性相同,公有成员可见,其他成员不可见。这里保护成员与私 有成员相同。 基类成员对派生类的可见性 对派生类来说,基类的公有成员和保护成员可见:基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态;基类的私有成员不可见:基类的私有成员仍然是私有的,派生类不可访问基类中的私有成员。 基类成员对派生类对象的可见性 对派生类对象来说,基类的公有成员是可见的, 其他成员是不可见。 所以,在公有继承时,

5、派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。对于私有继承方式: 基类成员对其对象的可见性 与一般类及其对象的可见性相同,公有成员可见,其 他成员不可见。 基类成员对派生类的可见性 对派生类来说,基类的公有成员和保护成员是可见的:基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问;基类的私有成员是不可见的:派生类不可访问基类中的私有成员。 基类成员对派生类对象的可见性 对派生类对象来说,基类的所有成员都是不可见的。 所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。 对于保护继承方式: 这种继承方式与

6、私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言, 基类成员对其对象的可见性 与一般类及其对象的可见性相同,公有成员可见,其 他成员不可见。 基类成员对派生类的可见性 对派生类来说,基类的公有成员和保护成员是可见的:基类的公有成员和保护成员 都作为派生类的保护成员,并且不能被这个派生类的子类所访问;基类的私有成员是不可见的:派生类不可访问基类中的私有成员。 基类成员对派生类对象的可见性 对派生类对象来说,基类的所有成员都是不可见的。 所以,在保护继承时,基类的成员也只能由直接派生类访问,而无法再往下继承。 9. 基类的_B _不能为派生类的成员访问,基类的_A _在派生类中的性质和继

7、承的性质一样,基类的_D_在私有继承时在派生类中成为私有成员函数,在公有和保护继承时在派生类中仍为保护成员函数。 A)公有成员 B)私有成员 C)私有成员函数 D)保护成员函数10. 派生类的对象对它的基类成员中_A_是可以访问的。 A)公有继承的公有成员 B)公有继承的私有成员 C)公有继承的保护成员 D)私有继承的公有成员11. 下列说法中错误的是_。B A)公有继承时基类中的public成员在派生类中仍是public的 B)公有继承时基类中的private成员在派生类中仍是private可见的 C)私有继承时基类中的public成员在派生类中是private的D)保护继承时基类中的pub

8、lic成员在派生类中是protected的基类的私有成员在在派生类中是隐藏的,是不可见的,派生类不可访问基类中的私有成员。12. 下面叙述错误的是_:A A)基类的protected成员在派生类中仍然是protected的 B)基类的protected成员在public派生类中仍然是protected的C)基类的protected成员在private派生类中是private的D)基类的protected成员不能被派生类的对象访问参考第八题说明14. C+类体系中,不能被派生类继承的有_。A A)构造函数 B)虚函数 C)静态成员函数 D)赋值操作函数派生类不能继承基类的构造函数和析构函数15.

9、 派生类的构造函数的成员初始化列表中,不能包含_。C A)基类的构造函数 B)派生类中子对象的初始化 C)基类中子对象的初始化D)派生类中一般数据成员的初始化派生类的构造函数只负责对基类成员(调用基类的构造函数)、新定义的子对象成员和一般数据成员进行初始化16 多继承的构造顺序可分为如下4步:C 所有非虚基类的构造函数按照它们被继承的顺序构造; 所有虚基类的构造函数按照它们被继承的顺序构造; 所有子对象的构造函数按照它们声明的顺序构造: 派生类自己的构造函数体: 这4个步骤的正确顺序是_。A) B) c) D)参考课本P387及例题17 关于多继承二义性的描述中,错误的是_。C A) 一个派生

10、类的两个基类中都有某个同名成员,在派生类中对这个成员的访可能出现二义性 B)解决二义性的最常用的方法是对成员名的限定法 C)基类和派生类中同时出现的同名函数,也存在二义性问题 D)一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类对该基类成员进行访问时,可能出现二义性 基类和派生类中同时出现的同名函数,若其形参个数、类型都一致则基类的被派生类的覆盖,否则可看作函数重载。 18 设置虚基类的目的是_。B A)简化程序 B)消除二义性 C)提高运行效率 D)减少目标代码 19. 下列虚基类的声明中,正确的是_。D A) class virtua1 B:public A B) virt

11、ual class B:public A C) class B:public A virtual D) c1ass B:virtual public A20. 带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数, 这样将对虚基类的子对象初始化_。D A)与虚基类下面的派生类个数有关 B)多次 C)两次 D)一次24. 下面_的叙述不符合赋值兼容规则。B A)派生类的对象可以赋值给基类的对象 B)基类的对象可以赋值给派生类的对象 C)派生类的对象可以初始化基类的引用D)派生类的对象的地址可以赋值给指向基类的指针赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对

12、象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员,而且所有成员的访问控制属性也和基类完全相同。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。赋值兼容规则中所指的替代包括以下的情况: 派生类的对象可以赋值给基类对象。 派生类的对象可以初始化基类的引用。 派生类对象的地址可以赋给指向基类的指针。在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。参考光盘讲义第13章第10节26. 下列程序巾,划线处正确的语句是_:C #include class Basepublic: void fun() coutBa

13、se:funendl; ;class Derived public Base void fun() _ /显式调用基类的函数fun() coutDerived:funfun();程序中要求显式调用某个类的成员时,必须使用成员名限定符(域区分符)。其一般格式为 类名. 或 类名.() 27. 下列程序中,编译时不会出错的语句是_A #include class Basepublic: Base() Base(int i) data=i; private: int data;class Derived: public Basepublic: Derived() :Base(0) Derived(i

14、nt x): Base(x) ;void main() Derived d1(1); Base *pb,b1; pb=&d1; /A d1=b1; /B Base &refB=d1; Derived d2=*pb; /C Derived &refD=refB; /D 公有继承时:派生类的对象可以赋值给基类的对象,即用派生类从基类继承来的成员,逐个赋值给基类对象的成员。反之则出错。派生类的对象可以初始化基类的引用。反之则出错。派生类的对象地址可以赋值给指向基类的指针。反之则出错。不用虚函数时,后两种情况的基类的指针和引用只能访问派生类中从基类继承来的成员二、填空题28 派生类对基类的继承有三种方

15、式:_公有继承public _、_私有继承private _和_保护继承protected _。29 类继承中,缺省的继承方式是private_。30 如果类Alpha继承了类Beta,则类Alpha称为派生类类,类Beta称为_基类_类。31 C+提供的_多继承_机制允许一个派生类继承多个基类,即使这些基类是相互无关的。32 利用继承能够实现_软件复用。这种实现缩短了程序的开发时间,促使开发人员复用 已经测试和调试好的高质量软件。33 若类Y是类X的私有派生类,类Z是类Y的派生类,则类Z_不能_访问类X的保护成员与公有成员。34 当用protected继承从基类派生一个类时,基类的publi

16、c成员成为派生类的protected 成员,protected成员成为派生类的_protected_成员。35 多继承情况下,派生类的构造函数的执行顺序取决于_定义_派生类时所指定的各 基类的顺序。36 构造函数_不能_被继承,析构函数_不能_被继承。37 对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行_基类的构造函数_,再执行_子对象的构造函数_,最后执行_派生类本身的构造函数体_。38 对基类数据成员的初始化必须在派生类构造函数中的_成员初始化列表_处执行。在派生类构造函数中,对基类数据成员的初始化必须在成员初始化列表中进行,新增成员的初始化既可以在成员初始化列表中进行,也

17、可以构造函数体中进行。39 当撤消一个含有基类和子对象成员的派生类对象时,将首先完成_派生类_的析 构函数定义体的执行,接着完成 _子对象的_的析构函数定义体的执行,最后完成_基类_的析构函数定义体的执行。派生类的析构函数的执行过程与派生类的构造函数的执行过程严格相反。40 _多_继承情况下,派生类中对基类成员的访问会出现二义性。解决二义性的 方法是_成员名限定法_和_虚基类_。41 在派生类中使用基类的成员,可以显式地使用_成员名限定符_来使用基类成员。43 设置虚基类的目的是_解决二义性问题_,可通过关键字virtual _标识虚基类。44 指向基类的对象的指针变量也可以指向_的对象。派生

18、类46 _派生类_类的对象可作为_基类_类的对象处理。47 在划线处填上适当的语句,完成下列程序。#include#include class Pointpublic: Point(double a, double b, double c) _X=a;Y=b;Z=c; double Getx( ) return X; double Gety( ) return Y; double Getz() return Z; private: _double X _protected:_double Y, Z;_ ;class Line:_public _ Pointpublic: Line(double

19、 a,double b,double c,double d):point(a,b,c)_K=d; void show() coutGetx()endl; coutGety() Yendl; coutGetz() Zendl; coutKa=7; /_正确_ py2-a=7; /_错误_ py3-a=7; /_错误_void Y3:f(YI* pyl,Y2* py2,Y3* py3) pyl-a=7; /_正确_ py2-a=7; /_错误_ py3-a=7; /_正确_void Z2:f(YI* pyl,Y2* py2,Y3* py3) pyl-a=7; /_正确_ py2-a=7; /_错误

20、_ py3-a=7; /_错误_ 派生类Y1从基类X公有继承,基类X成员a在Y1中仍然是public,所以Y1类型的指针py1可以访问a成员。因此、正确。派生类Y2从基类X保护继承.,X成员a在Y2中变为protected,保护成员不能在类体外被访问,因此在普通函数f及Y3的成员f函数的函数体内,不能通过Y2类型的指针py2访问a成员,和错误。派生类Z2从派生类Y2公有继承,基类成员a在Z2中变为保护成员,因此a 成员可以在Z2的类体内被直接访问,或通过Z2类体内的Z2类对象被访问,而不能通过类Z2的基类Y2的对象进行访问,因此错误。派生类Y3从基类X私有继承,基类成员a在Y3中变为私有成员,

21、只能在Y3的类体内进行访问,在Y3的成员函数f中,Y3类型的指针py3可以访问a成员,此时仍然是在类Y3的类体内,因此正确。但在普通函数f及Z2的成员f函数的函数体内,不能通过py3访问a成员,因此和错误。49 根据基类的定义和测试程序,完成下面派生类的定义。class Pointpublic: Point(int i=0,int j=0) X=i, Y=j; void Move(int xOff, int yOff) X+=xOff; Y+=yOff; int GetX() return X; int GetY() return Y;private: int X,Y;class Rectan

22、gle: private Pointpublic: Rectangle(int x,int y,int w,int h)_:Point(x,y)_W=w; H=h; void Move(int xOff, int yOff) _Point:Move(xOff,yOff);_ int GetX()_return Point:GetX( );_ int GetY()_return Point:GetY( ); _ int GetW()_return W;_ int GetH()_return H;_private: int W,H;#include #include void main() Rectangle rect(1,2,3,4); rect.Move(5,6); coutThe data of rect(X,Y,W,H):(” rect.GetX(),rect.GetY(), rect.GetW(),rect.GetH0)endl;注意在私有继承时,为了使派生类的对象可以访问基类的成员,必须在派生类中声明同名的成员。在类中定义同名成员有两种方法: void f()A:f(); 或 A:f;50

温馨提示

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

评论

0/150

提交评论