所指
向的数据。
3. 类的构造函数被自动调用执行的情况是在定义该类的() A. 成员函数时 B. 数据成员时 C. 对象时
D. 友元函数时 答案:C
解析:建立对象时,自动构造函数的初始化对象,是系统自动调用的。而成员函数、友元 函数,需要用户直接调用,因此选择C项。
4. 已知类A是类B的友元,类B是类C的友元,则() A. 类A一定是类C的友元 B. 类C一定是类A的友元
C. 类C的成员函数可以访问类B的对象的任何成员 D. 类A的成员函数可以访问类B的对象的任何成员 答案:C
解析:友元说明方法如下: friend?<类名>;//友元类类名 使用友元可以访问所有成员: (1)友元关系不能被继承。
(2)友元关系是单向的,不具有交换性。所以,B项和D项错误。 (3)友元关系不具有传递性。所以,A项错误。
5. 假定一个类的构造函数为“A(int i=4, int j=0) {a=i;b=j;}”, 则执行“A x (1);”语 句后,x.a和x.b的值分别为() A. 1和0 B. 1和4 C. 4和0 D. 4和1 答案:A
解析:带默认的构造函数,对应实参没有值时就采用形参值。调用构造函数时,i=1,不采 用默认值,而只有一个参数,j采用默认值0即j=0,因此a=1,b=0,选择A项。 6. 关于this指针使用说法正确的是()
A. 保证每个对象拥有自己的数据成员,但共享处理这些数据的代码 B. 保证基类私有成员在子类中可以被访问。 C. 保证基类保护成员在子类中可以被访问。 D. 保证基类公有成员在子类中可以被访问。 答案:A
解析:this指针是隐藏的,可以使用该指针来访问调用对象中的数据。基类的成员在派生 类中能否访问,与继承方式有关,与this没有关系。所以选择A项。 7. 所谓多态性是指()
A. 不同的对象调用不同名称的函数 B. 不同的对象调用相同名称的函数 C. 一个对象调用不同名称的函数 D. 一个对象调用不同名称的对象
答案:B
解析:多态性有两种静态多态性和动态多态性,静态多态性是指调用同名函数,由于参数 的不同调用不同的同名函数;动态多态性是指不同对象调用同名函数时,由于对象不同调用不同
的同名函数。多态性肯定具有相同的函数名,所以选择B项。 8. 友元关系不能() A. 提高程序的运行效率 B. 是类与类的关系
C. 是一个类的成员函数与另一个类的关系 D. 继承 答案:D
解析:友元可以是函数与类的关系即友元函数,也可以类与类的关系即友元类,但友元不 能继承,是单向性,且不具有传递性。友元可以访问类中所有成员,提高了访问的方便性。因此
选择D项。
9. 语句ofstream f(“TEMP.DAT”,ios::app|ios::binary)?的功能是建立流对象f,试图打 开文件TEMP.DAT 并与之连接,并且()
A. 若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B. 若文件存在,将其置为空文件;若文件不存在,打开失败
C. 若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件 D. 若文件存在,打开失败;若文件不存在,建立一个新文件 答案:A
解析:ios::binary,采用二进制形式,ios::app定位到文件尾部。 10. 构造函数不具备的特征是() A. 构造函数的函数名与类名相同 B. 构造函数可以重载
C. 构造函数可以设置默认参数 D. 构造函数必须指定类型说明 答案:D
解析:构造函数无返回类型不能继承但可以重载,所以选择D项。
11. 在公有继承的情况下,基类的公有或保护成员在派生类中的访问权限() A. 受限制 B. 保持不变 C. 受保护 D. 不受保护 答案:B
解析:继承方式的不同派生类成员的权限也不同,采用公有继承,除了私有无法访问外 ,公有、保护在派生类中保持不变,所以选择B项。
12. 假定一个类的构造函数为A(int aa,int bb) {a=aa--;b=a*bb;},则执行A x(4,5);语句后 ,x.a和x.b的值分别为() A. 3和15 B. 5和4 C. 4和20 D. 20和5
答案:C
解析:a=4,因为后减,b的值与a、bb相关,b=4*5=20,而与aa没有任何关系。 13. C++对C语言做了很多改进,即从面向过程变成为面向对象的主要原因是() A. 增加了一些新的运算符
B. 允许函数重载,并允许设置缺省参数 C. 规定函数说明符必须用原型 D. 引进了类和对象的概念 答案:D
解析:C++是一面向对象的语言,面向对象的特征,抽象、多态、继承和封装。 14. 在类中说明的成员可以使用关键字的是() A. public B. extern C. cpu D. register
答案:A
解析:extern用于声明外部变量的。register声明寄存器类型变量。无cpu类型。它们都不能声
明类成员。public声明为公有访问权限,所以选择A项。
15. C++语言中所有在函数中定义的变量,连同形式参数,都属于() A. 全局变量 B. 局部变量 C. 静态变量 D. 函数 答案:B
解析:变量存储类可分为两类:全局变量和局部变量。
(1)全局变量:在函数外部定义的变量称为全局变量,其作用域为:从定义变量的位置开始到
源程序结束。使用全局变量降低了程序的可理解性,软件工程学提倡尽量避免使用全局变量。 (2)局部变量:在函数内部定义的变量称为局部变量,其作用域为:从定义变量的位置开始到
函数结束。局部变量包含自动变量(auto)静态变量(static)以及函数参数。形参不能是静态
的。所以选择B项。
16. 在私有继承的情况下,基类成员在派生类中的访问权限() A. 受限制 B. 保持不变 C. 受保护 D. 不受保护 答案:A
解析:私有继承下,基类中的公有或保护成员在派生类中也是私有的,所以选择A选项。 17. 使用地址作为实参传给形参,下列说法正确的是() A. 实参是形参的备份 B. 实参与形参无联系 C. 形参是实参的备份
D. 实参与形参是同一对象 答案:D
解析:地址作为实参,表示实参与形参代表同一个对象。如果实参是数值,形参也是普通 变量,此时形参是实参的备份。所以选择D项。 18. C++的继承性允许派生类继承基类的()
A. 部分特性,并允许增加新的特性或重定义基类的特性 B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性 D. 所有特性,但不允许增加新的特性或重定义基类的特性 答案:A
解析:派生类有两类成员:一是基类,二是自身类。派生类中的成员不能访问基类中的私 有成员,可以访问基类中的公有成员和保护成员。 19. 对于int *pa[5];的描述,正确的是()
A. pa是一个指向数组的指针,所指向的数组是5个int型元素
B. pa是一个指向某个数组中第5个元素的指针,该元素是int型变量 C. pa[5]表示某个数组的第5个元素的值
D. pa是一个具有5个元素的指针数组,每个元素是一个int型指针 答案:D
解析:指针数组:数组元素都是相同类型的指针,相同类型的指针是说指针所指向的对象 类型是相同的。例如,语句int *pa[5];定义了一个指针数组。在指针数组的定义中有两个运
算符:*和[],运算符[]的优先级高于*,所以*pa[5]等价于*(pa[5]),pa[5]表示一
个数组,而*表示后面的对象为指针变量,合在一起*pa[5]表示一个指针数组。该数组包含5个
元素,每个元素都是指向int型的指针。所以选择D选项。 20. 以下基类中的成员函数表示纯虚函数的是() A. virtual void tt()=0 B. void tt(int)=0 C. virtual void tt(int) D. virtual void tt(int){} 答案:A
解析:当在基类中不能为虚函数给出一个有意义的实现时,可以将其声明为纯虚函数,实 现由派生类完成。格式:virtual<函数返回类型说明符><函数名>(<参数表>)=0;。
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答 案。错填、不填均无分。
1. 单目运算符作为类成员函数重载时,形参个数为___个。 答案:(P189)0
[解析]单目运算符使用成员函数重载可以不用形参,双目运算符使用一个参数。 2. 抽象类中至少要有一个___函数。 答案:(P173)纯虚
[解析]至少有一个纯虚函数的类就称为抽象类,即不能实例化。 3. 设类A有成员函数void f(void);若要定义一个指向类成员函数的指针变量pf来指向f,该 指针变量的声明语句是:___。