




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+(面向对象的程序设计)考前必背的名词解释和简答题1.封装封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。例如C+中的类,它定义了该集合中每个对象所共有的属性和方法。2.继承继承是让某个类型的对象获得另一个类型的对象的特征。例如:C+中子类对父类的继承,子类具有父类的特性,同时还可以拥有自己的新特性。3.多态多态是指不同类型的对象接收相同的消息时产生不同的行为。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减小代码的复杂度。例如函数的重载。4.什么是this指针?为什么要用this指针?this指针是类中的一个特殊指针,当类实例化时,this指针指向对象自己;而在类的声明时,指向类本身。通过它不仅可以提升成员函数操作的效率,而且能简化运算符重载代码。5.叙述公有、私有、保护成员在类中、类外和对象中的访问权限。类中的关键字public,private,protected声明了类中的成员与类外之间的关系,称为访问权限。对于public成员来说,他们是公有的,可以在类外和对象中访问。对于private成员来说,他们是私有的,不能在类外和对象中访问,数据成员只能由类中的函数使用,成员函数只允许在类中调用。对于protected成员来说,他们是受保护的,具有半公开性质,可以在类中与子类中访问。6.构造函数和析构函数的作用是什么?构造函数的功能是在创建对象时,给数据成员赋初值,即给对象初始化。析构函数的功能是释放一个对象,在对象删除前,用来做一些内存释放等清理工作。7.什么是类的继承和派生?继承是指一个事物可以继承其父辈全部或部分的特性,同时本身还有自己的特性。当一个新类从一个已定义的类中派生后,新类不仅继承了原有类的属性和方法,并且还拥有自己新的属性和方法,称为类的继承和派生。8.派生类public继承方式有那些特点?(1)在派生类中,基类的公有成员、保护成员和私有成员的访问属性保持不变。在派生类中,基类的私有成员是无法访问的,虽然基类的私有成员被派生类继承了。(2)派生类对象只能访问派生类和基类的公有成员。9.派生类protected继承方式有那些特点?(1)在派生类中,基类的公有成员、保护成员的访问属性都变成了保护的。(2)在保护继承方式下,派生类中仍可以访问基类的公有成员和保护成员,但基类的私有成员是无法访问的。(3)派生类对象只能访问派生类的公有成员,不能访问基类的任何成员。10.派生类private继承方式有那些特点?(1)在派生类中,基类的公有成员、保护成员和私有成员的访问属性都将变成私有的。(2)私有继承方式下,派生类中仍可以访问基类的公有成员和保护成员,但基类的私有成员是无法访问的。(3)派生类对象只能访问派生类的公有成员,不能访问基类的任何成员。11.在定义派生类的过程中,如何对基类的数据成员进行初始化?通过调用基类的构造函数来设定基类的数据成员的初值。格式为(形参表):基类1(参数表),基类2(参数表)对象成员1(参数表),对象成员2(参数表)12.什么是虚基类?它的作用是什么?虚基类是指在派生类中指定的基类是虚继承的方式。使用虚基类的目的是在多重派生中使用共有基类时,在派生类中只有一个拷贝从而解决有多个基类拷贝所产生的二义性问题。13.在函数调用过程中,什么是赋值传递,什么是引用传递?赋值传递是将实参赋值给形参变量,然后执行被调函数体。赋值传递有两种形式,一是直接传常量或变量值,二是传变量的地址。引用传递是将形参引用给形参,需要形参与实参指的是同一变量。14.#include和#include“filename.h”有什么区别?对于#include,编译器从标准库路径开始搜索filename.h。对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h。15.const有什么用途?(请至少说明两种)(1)可以定义const常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。16.类的指针成员为什么要用new另辟内存空间?为了保证类的封装性,类中的指针成员所指向的内存空间必须在类的定义中自行独立开辟和释放。一、填空1在类中必须声明成员函数的原型,成员函数的实现部分可以写在类外。2如果需要在被调函数运行期间,改变主调函数中实参变量的值,则函数的形参应该是引用类型或指针类型。3抽象类只能作为基类使用,而不能声明它的对象。4进行函数重载时,被重载的同名函数如果都没有用const修饰,则它们的形参个数或类型必须不同。5通过一个常对象只能调用它的常成员函数,不能调用其他成员函数。6函数的递归调用是指函数直接或间接地调用自身。7拷贝构造函数的形参必须是本类对象的引用。一、单项选择题(每小题2分,共40分)1、关于C+与C语言关系的描述中,(D)是错误的。AC语言是C+语言的一个子集BC语言与C+语言是兼容的CC+语言对C语言进行了一些改进DC+语言和C语言都是面向对象的2、已知:intm=10;下列表示引用的方法中,(A)是正确的。Aint&x=m;Bint&y=10;Cint&z;Dfloat&t=&m;3、考虑下面的函数原型声明:voidtestDefaulParam(inta,intb=7,charz=*);下面函数调用中,不合法的是(C)。AtestDefaulParam(5);BtestDefaulParam(5,8);CtestDefaulParam(5,#);DtestDefaulParam(0,0,*);4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是(A)。A函数的返回值类型B参数的类型C函数名称D参数个数5、下列有关C+类的说法中,不正确的是(D)。A类是一种用户自定义的数据类型B只有类中的成员函数或类的友元函数才能存取类中的私有成员C在类中,如果不做特别说明,所有成员的访问权限均为私有的D在类中,如果不做特别说明,所有成员的访问权限均为公用的6、已知X类,则当程序执行到语句Xarray3;时,调用了(D)次构造函数。A0B1C2D37、有关析构函数的说法,不正确的是(B)。A析构函数有且仅有一个B析构函数和构造函数一样可以有形参C析构函数的功能是在系统释放对象之前作一些内存清理工作D析构函数无任何函数类型8、类定义的内容允许被其对象无限制地存取的是(C)。Aprivate部分Bprotected部分Cpublic部分D以上都不对9、关于常数据成员的说法,不正确的是()。A常数据成员的定义形式与一般常变量的定义形式相同,只不过常数据成员的定义必须出现在类体中B常数据成员必须进行初始化,并且不能被更新C常数据成员通过构造函数的成员初始化列表进行初始化D常数据成员可以在定义时直接初始化10、运用运算符delete删除一个动态对象时()。A系统首先为该动态对象调用构造函数,再释放其占用的内存B系统首先释放该动态对象占用的内存,再为其调用构造函数C系统首先为该动态对象调用析构函数,再释放其占用的内存D系统首先释放动态对象占用的内存,再为其调用析构函数11、可以在类外用p.a的形式访问派生类对象p的基类成员a,其中a是(D)。A私有继承的公用成员B公用继承的私有成员C公用继承的保护成员D公用继承的公用成员12、在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是()。A派生类的对象可以赋给基类的对象B派生类的对象可以初始化基类的引用C派生类的对象可以直接访问基类中的成员D派生类的对象的地址可以赋给指向基类的指针13、设置虚基类的目的是(B)。5、类的静态成员分为和。6、运算符重载要求保持其原来的操作数个数、和语法结构。7、通过关键字可以声明模板,通过关键字指定函数模板的类型参数,有几个类型参数就有几个类型关键字。8、列出C+中两种用户自定义的数据类型:、。9、构造函数的作用是。10、后置自增运算符“+”重载为类的成员函数(设类名为A)的形式为。A简化程序B消除二义性C提高运行效率D减少目标代码14、在C+中,用于实现动态多态性的是(D)。A内联函数B重载函数C模板函数D虚函数15、不能说明为虚函数的是()。A析构函数B构造函数C类的成员函数D以上都不对16、如果一个类至少有一个纯虚函数,那么就称该类为()。A抽象类B派生类C纯基类D以上都不对17、下面关于友元的描述中,错误的是()。A友元函数可以访问该类的私有数据成员B一个类的友元类中的成员函数都是这个类的友元函数C友元可以提高程序的运行效率D类与类之间的友元关系可以继承18、下列运算符中,()运算符在C+中不能被重载。A&BC:Dnew19、模板的使用实际上是将类模板实例化成一个()。A函数B对象C类D抽象类20、假定MyClass为一个类,则该类的拷贝构造函数的声明语句为()。AMyClass(MyClassx)BMyClass&(MyClassx)CMyClass(MyClass&x)DMyClass(MyClass*x)二、填空题(前16个空,每空1分,后2个空,每空2分,共20分)1、类和对象的关系可表述为:类是对象的,而对象则是类的。2、在C+中,三种继承方式的说明符号为、和,如果不加说明,则默认的继承方式为。3、如果只想保留公共基类的一个复制,就必须使用关键字把这个公共基类声明为虚基类。4、若要把voidfun()定义为类A的友元函数,则应在类A的定义中加入语句5、类的静态成员分为和。6、运算符重载要求保持其原来的操作数个数、和语法结构。7、通过关键字可以声明模板,通过关键字指定函数模板的类型参数,有几个类型参数就有几个类型关键字。8、列出C+中两种用户自定义的数据类型:、。9、构造函数的作用是。10、后置自增运算符“+”重载为类的成员函数(设类名为A)的形式为一、单项选择题(每小题2分,共40分)1-5DACAD6-10DBCDC11-15DCBDB16-20ADCCC二、填空题(前16个空,每空1分,后2个空,每空2分,共20分)1抽象、实例2public、private_、protected、private_3virtual_4friendvoidfun(A&a)_5静态数据成员、静态成员函数6结合性、优先级_7Template、class(或typename)8类、结构体_简单解释什么是面向对象程序设计的封装性。答:对象是一个封装体,在其中封装了该对象所具有的属性和操作。对象作为独立的基本单元,实现了将数据和数据处理相结合的思想。此外,封装特性还体现在可以限制对象中数据和操作的访问权限,从而将属性“隐藏”在对象内部,对外只呈现一定的外部特性和功能。封装性增加了对象的独立性,C+通过建立数据类型类,来支持封装和数据隐藏。一个定义完好的类一旦建立,就可看成完全的封装体,作为一个整体单元使用,用户不需要知道这个类是如何工作的,而只需要知道如何使用就行。另一方面,封装增加了数据的可靠性,保护类中的数据不被类以外的程序随意使用。这两个优点十分有利于程序的调试和维护。4.2.2C+编译器怎样对标识符进行解析?答:编译器对标识符的解析分两步,第一步查找在声明中用到的标识符,特别是函数成员声明中用到的参数类型,第二步是函数成员体内的标识符。4.2.3为什么说类与对象的概念是客观世界的反映?答:客观世界的事物都具有某些属性和行为(或操作),具有相同属性和行为的事物可以归属于一类,用分类的方法可以提高认识事物的效率。C+中定义的类则是通过抽象的方法将某一类事物共有的静态特征(属性)和动态特征(行为)概括出来并加以描述,而对象是类的具体实现,所以说类与对象的概念是客观世界的反映。4.2.4什么叫类域?为什么说类域是抽象的?答:类域是类体所包括的范围。每个类定义都引入了一个独立的类域,在类域中说明的标识符仅在该类的类域中有效。由于类只是一个说明,看上去有数据,有函数,有类型定义,但是它并非实体,不分配内存,当然也不能运行。所以说类域是抽象的。4.2.5引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为引用?为什么返回值为引用的函数可以作为左值?答:引用变量是其关联变量的别名,二者在内存中占据同一个存储单元。在一个以引用作为参数的函数中,交换两个参数的值,实际上就是交换两个实参的值。如果函数的参数是引用,调用时需要取得实参的地址,而实参如果已经是一个地址,再进行引用将产生错误,故对应实参不能为引用。函数返回引用实际是指明(返回)了相应的关联变量,所以声明返回值为引用的函数实际上是将关联变量作为左值参与运算。4.2.6什么是缺省的构造函数?缺省的构造函数最多可以有多少个?答:如果在类定义中不显式地定义构造函数,C+编译器会自动产生一个缺省的构造函数,不过该函数不做具体的初始化工作。只要构造函数是无参的或者只要各参数均有缺省值的,C+编译器都认为是缺省的构造函数。缺省的构造函数只能有一个。4.2.7拷贝构造函数用于哪三个方面?答:(1)用类的一个对象去初始化该类的另一个对象时使用。(2)当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。(3)当函数的返回值是类对象,函数执行结束返回调用者时使用。4.2.8写出含有对象成员的类的构造函数的格式,并做简单说明。答:C+中对含对象成员的类对象的构造函数有固定的格式:类名:构造函数名(参数总表):对象成员1(参数名表1),对象成员2(参数名表2),对象成员n(参数名表n)号后用逗号隔开的是要初始化的对象成员,附在后面的参数名表1,参数名表n依次为调用相应对象成员所属的构造函数时的实参表。这些表中的参数通常来自冒号前的参数总表,但没有类型名。4.2.9所有类对象未重载的赋值运算符“”是怎样工作的?为什么它可以进行连续赋值?答:对所有的类对象,未重载的赋值运算符“=”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的引用,所以它可以进行连续赋值。4.2.10为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“”再加对象成员名?答:友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员名。这一点和一般函数一样。4.2.11重载复数运算符时,采用下面友元函数声明:friendComplexoperator+(Complex&c1,Complex&c2);为什么不能用于“实数+复数”?怎样改进才能适用?为什么?答:使用引用类型变量作为运算符重载函数的参数,身为左值的实数类型实参不能被转换为复数,编译时无法通过。添加const说明,使实数到复数的转换隐式地在一份拷贝上进行,则可以实现“实数+复数”运算。修改后的说明为:friendComplexoperator+(constComplex&c1,constComplex&c2);4.2.12类的静态数据成员与函数中的静态成员有何异同?答:类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中,为该类所有对象公用。函数中的静态变量也位于公用内存中,不随函数调用而重新分配,所以总是保留上次进入并执行该函数后留下的信息。4.2.13C+中结构、联合与类三者间有何异同?答:在C+中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下结构的成员为公有的。联合(union)是C+的导出数据类型,在语法与功能上类似于结构,二者的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的存储开始地址都相同,所以在任一时刻联合变量只能存储一个成员。4.2.14对象的第一特征是封装,那么由对象组成的面向对象的程序怎样建立各对象之间的有效联系?面向对象程序的组织与面向过程有什么不同?答:因为对象的操作主要用来响应外来消息并为其他对象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论