您好,欢迎访问三七文档
C++期末考试必备题库1、类的成员一般地分成为哪两部分?这两部分有何区别?答:类的成员包括成员变量,成员函数两部分。其中:成员变量一般是数据,描述对象的属性、状态。成员函数定义了对象(可以发出)的行为或对象(可接受)的操作。2、从访问权限角度如何区分不同种类的成员?它们各自的特点是什么?答:从访问权限的角度,成员可以分为:public,private,protected成员。(1)public成员:任何函数都可以访问(指成员变量)或调用(指成员函数),包括本类的成员函数和类外的其它函数。(2)private成员:只有本类的成员函数可以访问或调用。(3)protected成员:只有本类的成员函数或派生类的成员函数可以访问或调用。3、作用域运算符的功能是什么?它的使用格式如何?答:作用域运算符描述成员所属的类。使用格式:类::成员名。4、什么是对象?如何定义一个对象?对象的成员如何表示?答:对象是类的实例。C++像定义某种类型变量一样定义一个对象,形式:“类名对象名;”。对象的成员表示(注:可以对比结构体类型变量的成员表示):(1)对象名.成员名(2)(*对象指针).成员名或:对象指针-成员名5、如何对对象进行初始化?答:一般通过对象所属类的构造函数-对对象进行初始化。6、什么是构造函数?构造函数有哪些特点?答:构造函数是类的特殊成员函数,在创建对象时自动调用,一般常用于对象初始化。构造函数特点:函数名与类名相同,无返回值,可以有参数也可以没有参数(可以重载)。7、什么是析构函数?析构函数有哪些特点?答:析构函数是类的特殊成员函数,在对象生命期结束时自动调用,一般常用于清理对象所分配的内存空间。析构函数特点:函数名与类名相同(前面加~),无返回值,没有参数(不能重载)。8、什么是缺省构造函数?什么是缺省析构函数?答:缺省构造函数、缺省析构函数:(1)没有参数且(2)函数体内不做任何操作(函数体为空)的构造函数和析构函数。格式分别为:类名(){};~类名(){};定义类时若没有定义构造函数,系统会自动生成缺省构造函数;在定义类时若定义了构造函数时,系统不会自动生成缺省构造函数,此时可以显式地定义一个无参数且函数体为空的构造函数作为缺省构造函数。定义类时若没有定义析构函数,系统会自动生成缺省析构函数;若定义了析构函数且它的函数体为空,它也就是缺省析构函数(注意:析构不能重载)。9、什么是拷贝初始化构造函数?它的功能和特点是什么?答:拷贝初始化构造函数的参数为同类对象的引用。功能:拷贝构造函数一般用于使用一个现有的对象初始化同类的一个新对象。特点:参数为同类对象的引用。10、成员函数有什么特征?什么是内联函数?什么是外联函数?答:成员函数特征:可以访问类中任何成员。此外,成员函数可以像全局函数一样(1)重载,(2)设置为内联函数,(3)设置具有默认值。内联函数就是编译时函数代码直接嵌入函数调用点,以空间换时间,提高程序运行效率;外联函数是一般意义的函数或子程序(独立的可调用程序块)。在类体中定义的成员函数就是内联函数;在类体外定义的成员函数是外联函数,但可以用inline关键词定义为内联函数。11、什么是静态成员?静态成员的作用是什么?答:类的静态成员是整个类所有对象所共有的成员,它保存在存储器中唯一的地方供本类所有对象所共享。类的静态成员可以使类的所有对象共享一致、共同的数据。12、静态成员函数与非静态成员函数有何不同?静态成员函数的调用格式如何?答:类的静态成员函数属于类,它一般只能访问本类的静态数据成员,而不能访问本类的非静态数据成员(因为非静态成员属于各个对象,而此时对象是不知道的)。但本类对象作为参数时,则可以访问参数对象的非静态数据成员。类的非静态成员函数属于本类对象,所以它既可以访问(this指针指向的)本类对象的非静态数据成员,也可以访问本类的静态数据成员。静态成员函数的调用格式:“类名::静态成员函数名([参数])[;]”。13、什么是友元?为什么要使用友元?什么是友元函数?什么是友元类?答:友元是类的朋友,可以是函数(即:友元函数)也可以是另外一个类(即:友元类)。一个类的友元函数或友元类的所有成员函数都可以访问此类的私有成员,这使得操作更加直接(不必再通过公共接口),使用方便,程序效率高(不是间接访问)。但是,使用友元会破坏类的封装性,等于从外界直接访问类的私有成员,丧失很多OO封装带来的好处(数据不安全、容易导致代码混乱),建议少用。14、.什么是this指针?它有何作用?答:this指针:隐含在非静态成员函数中的特殊指针,它是当前正在调用此成员函数的对象的指针。this指针的作用:成员函数对成员变量的引用实际是通过this指针访问的,也就是说:成员变量this-成员变量;另外,如果成员函数需要访问当前对象,也可以通过this指针,*this就是当前对象。15、什么是对象数组?它如何定义?它如何赋值?答:对象数组:数组元素是某个类对象的数组。对象数组定义:“类类型数组名[数组长度];”。对象数组的赋值-就是给对象数组的数组元素赋值。16、指向对象数组的指针如何定义?如何赋值?答:指向对象数组的指针,就是指向对象数组元素的指针。(1)对于一维对象数组,指向此对象数组的指针定义和初始化为:类类型*指针变量名[=数组名];(2)对于二维对象数组,指向此对象数组的指针定义和初始化为:类类型(*指针变量名)[列数][=数组名];17、什么是指针数组?什么是对象指针数组?它们是如何定义的?它们又将如何被赋值?答:指针数组:数组的每个元素为指针;对象指针数组:数组的每个元素为指向对象的指针。指针数组定义:基类型*指针变量名[数组长度];18、带参数的main()的形式如何?main()有哪些参数?各表示什么意思?答:形式:intmain(intargc,char*argv[])。其中argc-命令行参数个数,argv-命令行各个参数串.19、如何定义一个常量?答:两种方法:(1)宏定义:#define宏名常量值(2)const常量:const类型常量名=常量值;20、如何定义常引用?答:定义常引用:const类型说明&引用名;注意:对于常引用,const不要放在引用名的前面,因为引用在定义时就确定了引用的对象。常引用引用的对象(中的值)不能更新。21、常成员函数有何特点?在什么情况下需要定义常成员函数?答:常成员函数不能修改自身对象,常对象只能调用常成员函数。在使用常对象时应当定义并使用常成员函数。22、.常数据成员的初始化如何实现?答:常数据成员只对象的某些数据一旦确定,不能改变。常数据成员的初始化在构造函数初始化列表完成。23、如何对子对象进行初始化?答:子对象初始化在构造函数初始化列表中完成,格式:“子对象名(参数)”24、运算符new和delete的功能是什么?它们可以用来创建动态对象和删除动态对象吗?答:new和delete创建动态对象和删除动态对象。25、使用new和delete创建和删除动态数组的格式如何?答:new创建动态数组得格式:类型*指针=new类型[数组长度];delete删除动态数组的格式:delete[]指针;25、什么是继承性?为什么说它是面向对象程序中的重要机制?答:面向对象系统的继承:是指新类可以继承现有类的成员(数据成员、成员函数)。继承可以实现代码的重用,是面向对象系统的重要机制。26、C++中继承分为哪两类?继承方式又分哪三种?答:C++继承分为单继承,多继承。继承方式分为公共、私有、保护继承三种方式,其中,公有继承是最常见的继承方式。27、三种继承方式中各有什么特点?不同继承方式中派生类的对象对基类成员的访问有何不同?答:继承方式使派生类中基类成员的访问权限的影响:(1)public继承:基类成员的访问权限不变;(2)private继承:基类的public,protected成员的访问权限都改变为private;(3)protected继承:基类的public,protected成员的访问权限都改变为protected。派生类对象对基类成员的访问取决于派生类中基类成员的访问权限。即:(1)public继承:派生类对象只能访问public基类成员。(2)private继承:派生类对象不能访问任何基类成员。(3)protected继承:派生类对象不能访问任何基类成员。28、如何定义单继承的派生类?如何定义多继承的派生类?答:单继承派生类的定义:class派生类类名:继承方式基类类名{新增成员};多继承派生类的定义:class派生类类名:继承方式1基类类名1,…,继承方式n基类类名n{新增成员};29、派生类与基类之间有什么关系?答:派生类是基类的具体化(模拟的是现实层次分类),是基类定义的延续(抽象类实现),是基类的组合(多继承)。30、单继承中,派生类的构造函数定义格式如何?答:单继承,派生类构造函数要包含对基类子对象初始化,所以派生类构造函数要在成员初始化列表中显式或隐含调用基类构造函数(缺省构造函数)。定义格式:类名(总参数表):基类名(参数表){……}31、多继承中,派生类的构造函数定义格式如何?答:多继承,派生类构造函数与单继承类似,同样也要包含对基类子对象初始化,所以派生类构造函数要在成员初始化列表中显式或隐含调用所有基类构造函数(缺省构造函数)。定义格式:类名(总参数表):基类名1(参数表1),……,基类名n(参数表n){……}32、什么是子类型?类A是类B的子类型,这意味着什么?答:一种类型A至少提供另外一种类型T的行为,那么A类型就是B类型的子类型。公有继承的派生类就是基类的子类型。类A是类B的子类型,意味着类A适应类B,即:类A对象可以使用的场合同样适合类B的对象。33、多继承中,在哪些情况下会出现二义性?如何消除二义性?答:多继承二义性主要出现在:(1)不同继承路径有同名成员,(2)不同继承路径继承共同的基类,存在多个基类子对象。消除二义性,对于(1)可以采用作用域限定;对于(2)可以采用作用域限定或虚基类。34、为什么要引入虚基类?带有虚基类的派生类的构造函数有什么特点?答:虚基类将多个同类的基类子对象合并,消除重复数据、避免二义性。带有虚基类的派生类构造函数的成员初始化列表中应该包含虚基类的构造函数,以便初始化基类子对象。35、什么是多态性?为什么说它是面向对象程序设计的一个重要机制?答:多态性:同样的消息产生对不同的对象不同的反应,本质上是同样的函数对不同的类具有不同的实现。通过多态性,可以实现运行时间的函数动态选择和调用,可以编制通用的代码。36、重载的含义是什么?定义重载函数时应注意些什么问题?答:函数重载:相似功能的函数取同一个函数名。重载函数必须在函数的参数上有区分(参数数目,参数类型)。37、符重载的含义是什么?是否所有的运算符都可以重载?答:运算符重载:对于特定一类对象,赋予特定运算符某种操作。大多数运算符可以重载,但“.”、“.*”、“::”、“?:”不能重载。38、运算符重载有哪两种形式?这两种形式有何区别?答:运算符重载可以用:成员函数,友元函数实现。重载为成员函数时,参数数目可以比操作数个数少1;重载为友元函数时,参数数目与操作数个数相同。39、运算符重载函数使用关键字const说明后,是指什么不可改变?答:运算符重载函数使用关键字const说明后,是指操作对象不可改变,只能做右值。40、静态联编和动态联编的区别是什么?答:静态联编:编译时间就确定了要调用的函数;动态联编:运行时间才能根据调用函数的对象确定要调用的函数。41、什么是虚函数?为什么要定义虚函数?它与动态联编有何关系?答:虚函数:说明为virtual的函数就是虚函数,在继承环境下,派生类与基类相同的函数,只要基类说明为虚函数,那么派生类中的相同的函数也是虚函数。虚函数定义的目的:动态连接。虚函数是动
本文标题:C++图库
链接地址:https://www.777doc.com/doc-2921379 .html