1、二级 C+笔试-234 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.己知类 X成功地重载了-、=、+、和这几个运算符,则其中肯定属于成员函数的运算符是( )。(分数:2.00)A.和B.和后置-C.=和D.前置-和2.( )不是构造函数的特征。(分数:2.00)A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明3.有关类和对象的说法不正确的是( )。(分数:2.00)A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型和变量
2、的关系相似4.如果一个类至少有一个纯虚函数,那么就称该类为( )。(分数:2.00)A.抽象类B.虚基类C.派生类D.以上都不对5.一个( )允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值能取任意数据类型。(分数:2.00)A.函数模板B.模板函数C.类模板D.模板类6.类模板的模板参数( )。(分数:2.00)A.只可作为数据成员的类型B.只可作为成员函数的返回类型C.只可作为成员函数的参数类型D.以上三者皆可7.下面关于 C+语言变量的叙述错误的是( )。(分数:2.00)A.C+语言中变量分为 auto,static,extern 和 register四种存
3、储类型B.自动变量和外部变量的作用域为整个程序C.内部静态变量的作用域是定义它的函数D.外部静态变量的作用域是定义它的文件8.有如下程序:#includeiostreamusing namespace std;class XXprotected;int k;public:XX(int n=5):k(n)XX()cout“XX“;virtual void f()const=0;inline void XX:f()constcoutk+3;class YY:public XXpublic:YY()cout“YY“;void f()constoutk-3;XX:f();int main()XX p.
4、f();delete i+=x+;for(j=0:j3;j+=if(j%2)continue;x+; x+;cout“x=“X;=(分数:2.00)A.x=4B.x=8C.x=6D.x=1211.已知:int a,b;下列 switch语句中,( )是正确的。(分数:2.00)A.switdh(a) case a: a+;break;case b: b+:break:B.switch(a+b)case 1:a+b; break;case 1:a-bC.switch(a*a)case1,2:+a; case3,4:+b;D.swish(a/l0+b)cases 5:a/5;break;defau
5、lt:a+b:12.下列关于 C+函数的描述中正确的是( )。(分数:2.00)A.主函数是程序的入口,它由用户定义的函数调用B.函数在调用之前必须先被声明C.每个用户定义函数只能被其他函数调用一次D.函数是 C+中面向对象程序设计框架的基本组成单元13.下列函数中,( )是对文件进行写操作的。(分数:2.00)A.get()B.read()C.seekg()D.put()14.下面的叙述中,不符合赋值兼容规则的是( )。(分数:2.00)A.派生类的对象可以赋值给基类的对象B.基类的对象可以赋值给派生类的对象C.派生类的对象可以初始化基类的引用D.派生类的对象的地址可以赋值给指向基类的指针1
6、5.下列对类的构造函数和析构函数的描述中,正确的是( )。(分数:2.00)A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载16.对以下说明语句的正确理解是( )。int a10=6,7,8,9,10;(分数:2.00)A.将 5个初值依次赋给 a1至 a5B.将 5个初值依次赋给 a0至 a4C.将 5个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,所以此语句不正确17.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初
7、始化( )。(分数:2.00)A.与虚基类下面的派生类个数有关B.多次C.两次D.一次18.下面程序的结果为( )。#include“iostream.h“void change(int a,int b)int temp;temp=a;a=b b=temp;void main()int m,n;m=8;n=9;change(m,n);coutm“ “nendl;(分数:2.00)A.89B.98C.程序有错误D.9919.while和 do-while循环的主要区别是( )。(分数:2.00)A.do-while的循环体至少无条件执行一次B.while的循环控制条件比 do-while的循环控
8、制条件更严格C.do-while允许从外部转到循环体内D.do-while的循环体不能是复合语句20.列对派生类的描述中,错误的是( )。(分数:2.00)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是 privateD.派生类只继承了基类的公有成员和保护成员21.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以无返回值C.函数调用町以出现在表达式中D.函数调用可以作为一个函数的形参22.对于拷贝初始化构造函数,正确的描述是( )。(分数:2.00)A.在 C+语
9、言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数B.必须为每个类定义拷贝初始化构造函数C.如果要使用拷贝初始化构造函数,则必须在类中先定义D.当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数23.如果 x=0,那么 while(true)中的 true与下面的条件( )等价。(分数:2.00)A.X=1B.X=1C.X1D.X124.假定要对类 AB定义加号操作符重载成员函数,实现两个 AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( )。(分数:2.00)A.AB operator+(AB XX:f();int ma
10、in()XX p.f();delete i+=x+;for(j=0:j3;j+=if(j%2)continue;x+; x+;cout“x=“X;=(分数:2.00)A.x=4B.x=8 C.x=6D.x=12解析:11.已知:int a,b;下列 switch语句中,( )是正确的。(分数:2.00)A.switdh(a) case a: a+;break;case b: b+:break:B.switch(a+b)case 1:a+b; break;case 1:a-bC.switch(a*a)case1,2:+a; case3,4:+b;D.swish(a/l0+b)cases 5:a/
11、5;break;default:a+b:解析:12.下列关于 C+函数的描述中正确的是( )。(分数:2.00)A.主函数是程序的入口,它由用户定义的函数调用B.函数在调用之前必须先被声明 C.每个用户定义函数只能被其他函数调用一次D.函数是 C+中面向对象程序设计框架的基本组成单元解析:13.下列函数中,( )是对文件进行写操作的。(分数:2.00)A.get()B.read()C.seekg()D.put() 解析:14.下面的叙述中,不符合赋值兼容规则的是( )。(分数:2.00)A.派生类的对象可以赋值给基类的对象B.基类的对象可以赋值给派生类的对象 C.派生类的对象可以初始化基类的引
12、用D.派生类的对象的地址可以赋值给指向基类的指针解析:15.下列对类的构造函数和析构函数的描述中,正确的是( )。(分数:2.00)A.构造函数可以重载,析构函数不能重载 B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载解析:16.对以下说明语句的正确理解是( )。int a10=6,7,8,9,10;(分数:2.00)A.将 5个初值依次赋给 a1至 a5B.将 5个初值依次赋给 a0至 a4 C.将 5个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,所以此语句不正确解析:17.带有虚基类的多层派生类构造
13、函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。(分数:2.00)A.与虚基类下面的派生类个数有关B.多次C.两次D.一次 解析:18.下面程序的结果为( )。#include“iostream.h“void change(int a,int b)int temp;temp=a;a=b b=temp;void main()int m,n;m=8;n=9;change(m,n);coutm“ “nendl;(分数:2.00)A.89 B.98C.程序有错误D.99解析:19.while和 do-while循环的主要区别是( )。(分数:2.00)A.do-wh
14、ile的循环体至少无条件执行一次 B.while的循环控制条件比 do-while的循环控制条件更严格C.do-while允许从外部转到循环体内D.do-while的循环体不能是复合语句解析:20.列对派生类的描述中,错误的是( )。(分数:2.00)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是 privateD.派生类只继承了基类的公有成员和保护成员 解析:21.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以无返回值C.函数调用町以出现在表达式中D.函数调用
15、可以作为一个函数的形参 解析:22.对于拷贝初始化构造函数,正确的描述是( )。(分数:2.00)A.在 C+语言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数 B.必须为每个类定义拷贝初始化构造函数C.如果要使用拷贝初始化构造函数,则必须在类中先定义D.当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数解析:23.如果 x=0,那么 while(true)中的 true与下面的条件( )等价。(分数:2.00)A.X=1 B.X=1C.X1D.X1解析:24.假定要对类 AB定义加号操作符重载成员函数,实现两个 AB类对象的加法,
16、并返回相加结果,则该成员函数的声明语句为( )。(分数:2.00)A.AB operator+(AB ;ate)解析:38.头文件 1 中包含了处理用户控制的文件操作所需的信息。(分数:2.00)填空项 1:_ (正确答案:fstream.h)解析:39.C+在重载运算将中,如用成员函数重载一元运算符参数表中需要_个参数,如用友元函数重载一元运算符参数表中需要_个参数。(分数:2.00)填空项 1:_ (正确答案:0 1)解析:40.一个类中有 1 个析构函数。(分数:2.00)填空项 1:_ (正确答案:1)解析:41.有如下的程序:#includeiostreamusing namespa
17、ce std;class ATfriend ostream& operator(ostream&,AT);at;ostream& operator(ostream& os,AT)return os;int main()cout“MyHome“at“isH“;执行上面的程序将输出_。(分数:2.00)填空项 1:_ (正确答案:Myhomeis H)解析:42.对基类数据成员的初始化必须在派生类构造函数中的 1 处执行。(分数:2.00)填空项 1:_ (正确答案:成员初始化列表)解析:43.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、 1 和选择排序等。(分数:2.00)填
18、空项 1:_ (正确答案:交换排序)解析:44.有如下程序:#includeiostreamusing namespace std;templatetypename TT total(T*data)T s=0;While(*data)s+=*data+;return s;int main()int x=2,4,6,8,10,12,14,16,18;couttotal(x);return 0;执行上面程序的输出是_。(分数:2.00)填空项 1:_ (正确答案:20)解析:45. 1使一个函数可以定义成对许多不同数据类型完成同一个任务。(分数:2.00)填空项 1:_ (正确答案:函数模板)解析
19、:46.operator是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函数的专用函数名,务必把该函数说明为 1 的。(分数:2.00)填空项 1:_ (正确答案:public)解析:47.类继承中,缺省的继承方式是 1。(分数:2.00)填空项 1:_ (正确答案:私有继承)解析:48.cerr与 cout的差别在于:cerr 是 1 重定向的,cerr 不能被缓冲,它的输出直接传达到标准输出设备上。(分数:2.00)填空项 1:_ (正确答案:不能)解析:49.模板使我们可以用一个代码段指定一组相关函数(称为 1)或一组相关类(称为 2。(分数:2.00)填空项 1:_ (正确答案:函数模板)填空项 1:_ (正确答案:类模板)解析:50.为了便于对照检查,测试用例应由输入数据和预期的 1 两部分组成。(分数:2.00)填空项 1:_ (正确答案:输出结果)解析: