1、二级 C+-178 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.下列叙述中正确的是_。(分数:2.50)A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D.上述三种说法都不对2.下列叙述中正确的是_。(分数:2.50)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈底指针的变化而动态变化D.上述
2、三种说法都不对3.软件测试的目的是_。(分数:2.50)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误4.下面描述中,不属于软件危机表现的是_。(分数:2.50)A.软件过程不规范B.软件开发生产率低C.软件质量难以控制D.软件成本不断提高5.软件生命周期是指_。(分数:2.50)A.软件产品从提出、实现、使用维护到停止使用退役的过程B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程6.面向对象方法中,继承是指_。(分数:2.50)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类
3、之间共享属性和操作的机制7.层次型、网状型和关系型数据库划分原则是_。(分数:2.50)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是_。(分数:2.50)A.一对一B.一对多C.多对多D.多对一9.数据库设计中反映用户对数据要求的模式是_。(分数:2.50)A.内模式B.概念模式C.外模式D.设计模式10.有三个关系 R、S 和 T 如下: (分数:2.50)A.自然连接B交C.投影D并11.下列关于函数参数的叙述中,正确的是_。(分数:2.50)A.在函数原型中不必声明
4、形参类型B.函数的实参和形参共享内存空间C.函数形参的生存期与整个程序的运行期形同D.函数的形参在函数被调用时获得初始值12.下列关于对象初始化的叙述中,正确的是_。(分数:2.50)A.定义对象的时候不能对对象进行初始化B.定义对象之后可以显式地调用构造函数进行初始化C.定义对象时将自动调用构造函数进行初始化D.在一个类中必须显式地定义构造函数实现初始化13.下列关于基类和派生类的叙述中,正确的是_。(分数:2.50)A.每个类最多只能有一个直接基类B.派生类中的成员可以访问基类中的任何成员C.基类的构造函数必须在派生类的构造函数中调用D.派生类除了继承基类的成员,还可以定义新的成员14.下
5、列关于赋值运算符“=”重载的叙述中,正确的是_。(分数:2.50)A.赋值运算符只能作为类的成员函数重载B.默认的赋值运算符实现了“深层复制”功能C.重载的赋值运算符函数有两个本类对象作为形参D.如果已经定义了赋值(拷贝)构造函数,就不能重载赋值运算符15.下列关于模板的叙述中,正确的是_。(分数:2.50)A.如果一个类中存在纯虚函数,这个类就是类模板B.函数模板不能有形式参数表C.类模板是一种参数化类型的类,是类的生成器D.类模板中不能包含构造函数16.下列关于 C+预定义流对象的叙述中,正确的是_。(分数:2.50)A.cin 是 C+预定义的标准输入流对象B.cin 是 C+预定义的标
6、准输入流类C.cout 是 C+预定义的标准输入流对象D.cout 是 C+预定义的标准输入流类17.下列选项中,正确的 C+标识符是_。(分数:2.50)A.6_groupB.group6C.age+3D._group_618.下列选项中,正确的 C+表达式是_。(分数:2.50)A.counter+3B.element3+C.a+=bD.“a“=b19.下列循环语句中有语法错误的是_。(分数:2.50)A.int i; for(i=1; i10; i+)cout“*“;B.int i, j; for(i=1, j=0; i10; i+, j+)cout“*“;C.int i=0; for(
7、;i10; i+)cout“*“;D.for(1)cout“*“;20.下列定义语句中,错误的是_。(分数:2.50)A.intpx*;B.char*acp10C.char(*pac)10D.int(*p)()21.有如下程序: #includeiostream using namespace std; int f(int x); int sum(int n) int x, s=0; for(x=0; x=n; x+) s+=f(x); return s; int f(int x)return(x*x+1); int main() int a, b; cout“Enter a integer
8、number:“; cina; b=sum(a); cout“a=“a“, b=“bendl; return 0; 如果输入数字 3,其输出结果是_。(分数:2.50)A.a=3, b=12B.a=3, b=16C.a=3, b=18D.a=4, b=2022.有如下程序: #includeiostream using namespace std; int main() int y=18, i=0, j, a8; do ai=y%2; i+; y=y/2; while(y=1); for(j=i-1; j=0; j-) coutaj; coutendl; return 0; 其运行结果是_。(
9、分数:2.50)A.1000B.10010C.00110D.1010023.假定要对类 AB 定义加号操作符重载成员函数,实现两个 AB 类对象的加法并返回相加结果,该成员函数的声明语句为_。(分数:2.50)A.AB operator+(ABB.AB operator+(ABC.operator+(AB a);D.AB24.下列关于派生类的说法,错误的是_。(分数:2.50)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了其基类的成员D.派生类中继承的基类成员的访问权限在派生类中保持不变25.在 C+语言类体系中,不能被派生类继承的
10、有_。(分数:2.50)A.转换函数B.构造函数C.虚函数D.静态成员函数26.下列函数原型声明中,错误的是_。(分数:2.50)A.int function(int m, int n);B.int function(int, int);C.int function(int m=3, int n);D.int function(int 27.若 MyClass 为一个类,执行“MyClass a4, *p5;”语句时会自动调用该类的构造函数的次数是_。(分数:2.50)A.2B.5C.4D.928.若在表达式“y/x”中,“/”是作为成员函数重载的运算符,则该表达式还可以表示为_。(分数:2.
11、50)A.operator/(x, y)B.operator/(y)C.operator/(x)D.operator/(y,x)29.若要重载+、=、=和运算符,则必须作为类成员重载的运算符是_。(分数:2.50)A.+和=B.=和C.=和D.=和30.有函数模板声明和一些变量定义如下: templateclass T1, class T2, class T3T1 sum(T2, T3); double d1, d2; 则下列调用中,错误的是_。(分数:2.50)A.sumdouble, double, double(d1, d2);B.sumdouble, double(d1, d2);C.
12、sumdouble(d1, d2);D.sum(d1, d2);31.有下列语句序列: char str10; cinstr; 当从键盘输入“I love this game”时,str 中的字符串是_。(分数:2.50)A.“I love this game”B.“I love thi”C.“I love”D.“I”32.有如下程序: #includeiostream #includecmath using std:cout; class Point public: friend double distance(const Point /p 距原点的距离 Point(int xx=0, in
13、t yy=0):x(xx), y(yy) / private: int x, y; ; double distance(const Point int main() Point p1(3, 4); coutdistance(p1); / return 0; 下列叙述中正确的是_。(分数:2.50)A.程序编译正确B.程序编译时语句出错C.程序编译时语句出错D.程序编译时语句出错33.有如下程序: #includeiostream using namespace std; class CD public: CD() cout“C“; private: char name80); ; int ma
14、in() CD a, *b, d2; return 0; 运行时的输出结果是_。(分数:2.50)A.CCCCB.CCCC.CCDC34.某类中有一个无参且无返回值的常成员函数 Show,则正确的 Show 函数原型是_。(分数:2.50)A.const void Show();B.void const Show();C.void Show() const;D.void Show(const);35.若已定义了类 Vehicle,则下列派生类定义中,错误的是_。(分数:2.50)A.class Car:Vehicle/*类体略*/;B.class Car:public Car/*类体略*/;C
15、.class Car:public Vehicle/*类体略*/;D.class Car:virtual public Vehicle/*类体略*/);36.有如下程序: #includeiostream using namespace std; class Music public: void setTitle(char *str) strcpy(title, str); protected: char type10; private: char title20; ; class Jazz:public Music public: void set(char*str) strcpy(type
16、, “Jazz“); / strcpy(title, str); / ; 下列叙述中正确的是_。(分数:2.50)A.程序编译正确B.程序编译时语句出错C.程序编译时语句出错D.程序编译时语句和都出错37.有如下程序: #includeiostream using namespace std; class Instrument public: virtual void Display() =0; ; class Piano:public Instrument public: void Display() /*函数体程序略*/ ; int main() Instrument s; Instrum
17、ent *p=0; /; return 0; 下列叙述正确的是_。(分数:2.50)A.语句“Instrument *p=0;”编译时出错B.语句“Instrument s”编译时出错C.类 Piano 中的 Display 函数不是虚函数D.类 Instrument 是一个虚基类38.有类定义如下: class Type public: Type(int i=0); Type operator-(int); friend Type operator+(Type, Type); private: int val; ; 若有对象定义 Type c1;则下列语句序列中,错误的是_。(分数:2.50
18、)A.Type(3)+c1;B.c1+Type(3);C.3-c1;D.c1-3;39.有如下程序: #includeiostream #includeiomanip US ing namespace std; int main() coutsetw(10)setfill(“x“) setprecision(8)left; cout12.345679_98765; return 0; 若程序的输出时 12.34567998765,则画线处缺失的部分是_。(分数:2.50)A.setw(10)B.setfill(“x“)C.setprecision(8)D.right40.有如下程序: #inc
19、ludeiostream using namespace std; class Book public: Book(char* t=“) strcpy(title, t); _ private: char title40; ; class Novel:public Book public: Novel(char*t=“):Book(t) char* Category() const return“文学“; ; int main() Book *pb; pb=new Novel(); coutpb-Category(); return 0; 程序运行时出现结果是“文学”,则画线处缺失的语句是_。
20、(分数:2.50)A.char*Category();B.char*Category() const;C.virtual char*Category()const;D.virtual char* Category()const=0;二级 C+-178 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.下列叙述中正确的是_。(分数:2.50)A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D.上述三种说法都
21、不对解析:解析 线性表的顺序存储结构使用一组地址连续的存储单元,而链式仔储结构除了存放数据之外,还需要存放指向下一个元素的指针,因此选 B。2.下列叙述中正确的是_。(分数:2.50)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈底指针的变化而动态变化 D.上述三种说法都不对解析:解析 栈中元素是遵循先进后出的原因,入栈和出栈都是对栈顶指针操作,因此随栈顶指针的变化而动态变化。3.软件测试的目的是_。(分数:2.50)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发
22、现程序中的错误 解析:解析 软件测试目的慨念理解题,本题的答案为 D。4.下面描述中,不属于软件危机表现的是_。(分数:2.50)A.软件过程不规范B.软件开发生产率低 C.软件质量难以控制D.软件成本不断提高解析:解析 软件的危机表现包括:用户对已完成的软件系统不满意;软件产品质量不过关;软件常常不可维护;软件通常没有适当的文档;对软件开发的进度和经费估计不准。5.软件生命周期是指_。(分数:2.50)A.软件产品从提出、实现、使用维护到停止使用退役的过程 B.软件从需求分析、设计、实现到测试完成的过程C.软件的开发过程D.软件的运行维护过程解析:解析 软件生命周期的定义是通常将软件产品从提
23、出、实现、使用维护到停止使用而退役的过程称。还可将软件周期分为三阶段:定义阶段、开发阶段和维护阶段。6.面向对象方法中,继承是指_。(分数:2.50)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制 解析:解析 面向对象方法中,继承是指新类从已有类那里得到已有的特性。由此定义得到正确答案为D。7.层次型、网状型和关系型数据库划分原则是_。(分数:2.50)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式 解析:解析 首先我们应该理解数据库的概念,数据库是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,
24、是多种应用数据的集成。可见数据库是数据之间的联系方式,因此也是数据库划分的原则。8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是_。(分数:2.50)A.一对一B.一对多C.多对多 D.多对一解析:解析 本题考查的知识点是实体间的联系,其中有一对一、一对多、多埘多这几种联系。本题中一个工作人员可以使用多台计算机,而一台计算机又可被多个人使用,所以是多对多的关系。9.数据库设计中反映用户对数据要求的模式是_。(分数:2.50)A.内模式B.概念模式C.外模式 D.设计模式解析:解析 本题考查的知识点是数据库的三级模式,包括:慨念模式、外模式和
25、内模式。其中,概念模式是数据库系统中对全局数据逻辑结构的描述。外模式是用户的数据视图。内模式又称物理模式,给出了数据库的物理存储结构和物耻方法,内模式对用户是透明的。因此本题正确答案为 C。10.有三个关系 R、S 和 T 如下: (分数:2.50)A.自然连接 B交C.投影D并解析:解析 关系运算中自然连接是使用等于运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。并是指两个结果集合并,交是指两个结果集的公共部分。投影是从表中选出指定的属性值组成新表,是单目运算,由此可知本题答案为 A。11.下列关于函数参数的叙述中,正确的是_。(分数:2.50
26、)A.在函数原型中不必声明形参类型B.函数的实参和形参共享内存空间C.函数形参的生存期与整个程序的运行期形同D.函数的形参在函数被调用时获得初始值 解析:解析 该题考查的内容是函数的参数问题,考生必须注意: 函数说明一般遵循两个原则:1)若一个函数先定义,后调用,则调用前不用说明。2)若先调用,后定义,则调用前必须说明。而且在函数原型中要声明形参的类型。 函数参数的传递方式包括:传值、传指针和传引用,当参数的传递方式是第一种时,形参和实参之间没有任何关系,分别属于不同的存储空间。 函数形参只是在调用时被分配临时的存储空间,其生命周期是从被调用开始到该调用函数结束为止。12.下列关于对象初始化的
27、叙述中,正确的是_。(分数:2.50)A.定义对象的时候不能对对象进行初始化B.定义对象之后可以显式地调用构造函数进行初始化C.定义对象时将自动调用构造函数进行初始化 D.在一个类中必须显式地定义构造函数实现初始化解析:解析 该题考查的内容是对象的定义及初始化,考生必须清楚:定义一个对象就像定义一个变量一样,但是不同的是对象的初始化是系统自动调用构造函数进行初始化,程序中不能直接调用构造函数。当我们还可以通过类的已知对象定义该类的一个正在被创建的对象,此时我们要调用拷贝构造函数,注意拷贝构造函数也是系统自动调用的。13.下列关于基类和派生类的叙述中,正确的是_。(分数:2.50)A.每个类最多
28、只能有一个直接基类B.派生类中的成员可以访问基类中的任何成员C.基类的构造函数必须在派生类的构造函数中调用D.派生类除了继承基类的成员,还可以定义新的成员 解析:解析 该题考查的内容是派生类的定义及访问权限,考生应该掌握: 派生类具有基类数据成员和成员函数,同时还可增加自己的新成员。 当派生类私有继承基类时,基类的私有成员派生类是无法访问的。 如果基类中定义了默认构造函数或者没有定义任何一个构造函数时在派生类构造函数的定义中可以省略对基类构造函数的调用。14.下列关于赋值运算符“=”重载的叙述中,正确的是_。(分数:2.50)A.赋值运算符只能作为类的成员函数重载 B.默认的赋值运算符实现了“
29、深层复制”功能C.重载的赋值运算符函数有两个本类对象作为形参D.如果已经定义了赋值(拷贝)构造函数,就不能重载赋值运算符解析:解析 “=”、“”、“()”、“-”以及所有的类型转换运算只能作为成员函数重载。15.下列关于模板的叙述中,正确的是_。(分数:2.50)A.如果一个类中存在纯虚函数,这个类就是类模板B.函数模板不能有形式参数表C.类模板是一种参数化类型的类,是类的生成器 D.类模板中不能包含构造函数解析:解析 该题考查的内容是类模板以及函数模板,类模板是一种参数类型的类,是类的生成器其类的成员组成和成员函数的代码都相同,所不同的是针对的类型,它是一系列相关类的模板或样本,因此可以包含
30、构造函数。对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。因此 C 项是正确的。16.下列关于 C+预定义流对象的叙述中,正确的是_。(分数:2.50)A.cin 是 C+预定义的标准输入流对象 B.cin 是 C+预定义的标准输入流类C.cout 是 C+预定义的标准输入流对象D.cout 是 C+预定义的标准输入流类解析:解析 该题考查的是预定义流对象,cin、cout 是 iostream 类的标准输入/输出流对象,而并非输入/输出流类。因此选项 A 是正确的。17.下列选项中,正确的 C+标识符是_。(分数:2.50)A.6_groupB.group6C.age+3
31、D._group_6 解析:解析 该题考查的内容是标识符的命名规则,考生应该注意:标识符是一个以字母或下画线开头的,由字母、数字、下画线组成的字符串;标识符不能与关键字同名;标识符中的字母不区分大小写。A、B、C 选项均含有非法标识,因此正确的答案是 D 选项。18.下列选项中,正确的 C+表达式是_。(分数:2.50)A.counter+3B.element3+C.a+=b D.“a“=b解析:解析 “+”是单目运算符,不能有两个操作数,A 项是错误的。“+”是双目运算符,应该有两个操作数,B 项也是错误的。D 项中“a“是字符常量,不能被赋值,D 项也是错误的。“+=”是双目运算符,应该有
32、两个操作数,故 C 项是正确的。19.下列循环语句中有语法错误的是_。(分数:2.50)A.int i; for(i=1; i10; i+)cout“*“;B.int i, j; for(i=1, j=0; i10; i+, j+)cout“*“;C.int i=0; for(;i10; i+)cout“*“;D.for(1)cout“*“; 解析:解析 该题考查的内容是 for 循环语句,其中 for 循环语句的语法格式是: for(表达式 1; 表达式 2; 表达式 3)语句 其中表达式 1 和表达式 2 和表达式 3 都可以省略,但是分号不能省略,这时 for 语句是一个死循环。因此D
33、项是错误的,for 语句没有这种语法格式。20.下列定义语句中,错误的是_。(分数:2.50)A.intpx*; B.char*acp10C.char(*pac)10D.int(*p)()解析:解析 A 项如果想定义一个整型指针的话,形式应该为 int *px;B 项定义了一个指向数组的指针,C 项定义了一个指针数组,每个数组元素都存放一个字符指针,D 项定义了一个函数指针,其返回值为整型。因此 A 项是错误的。21.有如下程序: #includeiostream using namespace std; int f(int x); int sum(int n) int x, s=0; for
34、(x=0; x=n; x+) s+=f(x); return s; int f(int x)return(x*x+1); int main() int a, b; cout“Enter a integer number:“; cina; b=sum(a); cout“a=“a“, b=“bendl; return 0; 如果输入数字 3,其输出结果是_。(分数:2.50)A.a=3, b=12B.a=3, b=16C.a=3, b=18 D.a=4, b=20解析:解析 按照 sum 函数的功能,若输入 a 的值为 3,则 for 循环,1 次,函数 f 调用 4 次,b 的值为0+(02+1
35、)+(12+1)+(22+1)+(32+1)=18。22.有如下程序: #includeiostream using namespace std; int main() int y=18, i=0, j, a8; do ai=y%2; i+; y=y/2; while(y=1); for(j=i-1; j=0; j-) coutaj; coutendl; return 0; 其运行结果是_。(分数:2.50)A.1000B.10010 C.00110D.10100解析:解析 y 的初始值为 18,按照取余算法,数组 a 的值为0, 1, 0, 0, 1。程序要求从最后一个元素开始输出,所以答案
36、为 10010。23.假定要对类 AB 定义加号操作符重载成员函数,实现两个 AB 类对象的加法并返回相加结果,该成员函数的声明语句为_。(分数:2.50)A.AB operator+(ABB.AB operator+(AB C.operator+(AB a);D.AB解析:解析 加法运算为双目运算,若作为 AB 类的成员函数重载,则第一个操作数就是类 AB 的对象本身,括号中含有一个参数,即另一个操作数。由于要返回相加结果,必须有返回值类型 AB。24.下列关于派生类的说法,错误的是_。(分数:2.50)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自
37、己的成员外,还包含了其基类的成员D.派生类中继承的基类成员的访问权限在派生类中保持不变 解析:解析 一个派生类可以从多个基类中继承,称为多继承。派生类中除了自己定义的成员外,还包含其基类继承的成员。派生类中基类成员的权限与继承方式息息相关,私有继承改变基类成员权限为私有成员,保护继承改变基类成员为保护成员,而公有继承则不改变基类成员的权限。25.在 C+语言类体系中,不能被派生类继承的有_。(分数:2.50)A.转换函数B.构造函数 C.虚函数D.静态成员函数解析:解析 派生类对象的数据结构是由基类中说明的数据成员和派生类中说明的数据成员共同构成,所以不能继承基类的构造函数。26.下列函数原型
38、声明中,错误的是_。(分数:2.50)A.int function(int m, int n);B.int function(int, int);C.int function(int m=3, int n); D.int function(int 解析:解析 该题考查的是函数原型声明问题,函数原型说明的一般格式为: 类型函数名(形参类型说明表) 或 类型函数名(形参说明表) 类型是该函数返回值的类型,必须与函数定义时指定的类型一致,形参说明表可以仅给出每一个参数的类型,也可以指明每一个形参的类型及其形参名。函数声明不涉及默认参数问题,因此 C 项是错误的。27.若 MyClass 为一个类,执
39、行“MyClass a4, *p5;”语句时会自动调用该类的构造函数的次数是_。(分数:2.50)A.2B.5C.4 D.9解析:解析 在定义数组对象时,因为数组长度为 4,因此要 4 次调用构造函数。在定义指向对象的指针时,由于指针没有实例化,故不调用构造函数。因此 C 项是正确的。28.若在表达式“y/x”中,“/”是作为成员函数重载的运算符,则该表达式还可以表示为_。(分数:2.50)A.operator/(x, y)B.operator/(y)C.operator/(x) D.operator/(y,x)解析:解析 该题考查的内容是运算符的重载,考生首先要清楚,“/”是以成员函数重载的
40、,成员函数有隐含参数的 this 指针,一般是指第一个操作数,对于双目运算符,有 1 个参数,一般指第二个操作数;对于单目运算符,参数表为空,“/”是双目运算符,第二个操作数为 y,因此正确答案为 C。29.若要重载+、=、=和运算符,则必须作为类成员重载的运算符是_。(分数:2.50)A.+和=B.=和C.=和D.=和 解析:解析 C+规定“=”、“”、“()”、“-”以及所有的类型转换运算只能作为成员函数重载。30.有函数模板声明和一些变量定义如下: templateclass T1, class T2, class T3T1 sum(T2, T3); double d1, d2; 则下列
41、调用中,错误的是_。(分数:2.50)A.sumdouble, double, double(d1, d2);B.sumdouble, double(d1, d2);C.sumdouble(d1, d2);D.sum(d1, d2); 解析:解析 该考题考查的内容是函数模板调用时的实参表的省略,考生必须注意可否省略。下面我们介绍一下模板实参的省略。模板函数的调用格式为: 模板函数名模板实参表(函数实参表); 在调用一个模板函数时,编译系统需要足够的信息来判断每个虚拟类型参数所对应的实际类型,我们可以从模板实参表和函数实参表中获得,其中模板实参表由于函数实参表,如果从后者获得的信息已经能够判定其
42、中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。但当模板函数需要获得特定类型的返回值时,不能省略模板实参。故 D是错误的。31.有下列语句序列: char str10; cinstr; 当从键盘输入“I love this game”时,str 中的字符串是_。(分数:2.50)A.“I love this game”B.“I love thi”C.“I love”D.“I” 解析:解析 该题考查的内容是输入字符流对象 cin,考生应该注意:从键盘上输入多个字符型数据时,每两个数据之间用空格、制表符或换行隔开;从键盘输入字符
43、型数据时,不要用单引号将字符括起来。当输入字符串“I love this game”时,当遇到空格时,系统认为输入结束,故 str 中的字符串为I,选项 D 是正确的。32.有如下程序: #includeiostream #includecmath using std:cout; class Point public: friend double distance(const Point /p 距原点的距离 Point(int xx=0, int yy=0):x(xx), y(yy) / private: int x, y; ; double distance(const Point int
44、main() Point p1(3, 4); coutdistance(p1); / return 0; 下列叙述中正确的是_。(分数:2.50)A.程序编译正确 B.程序编译时语句出错C.程序编译时语句出错D.程序编译时语句出错解析:解析 该题考查的内容是含参构造函数以及友元函数的相关知识,为含参构造函数,这里涉及默认参数的问题,当未传递参数时用默认参数,当传递参数时就不使用默认参数。为友元函数定义形式,定义友元函数不用加关键字 friend。为友元函数在主函数中的调用,如果一个函数被定义为友元函数就可以访问该类中的所有成员。故该程序编译成功,正确答案为 A。33.有如下程序: #inclu
45、deiostream using namespace std; class CD public: CD() cout“C“; private: char name80); ; int main() CD a, *b, d2; return 0; 运行时的输出结果是_。(分数:2.50)A.CCCCB.CCC C.CCDC解析:解析 该题考查的内容是程序结束时析构函数的调用情况。考生应该清楚当对象被创建时系统会自动调用构造函数,当程序结束对象被释放时,系统要调用析构函数。根据程序的执行顺序定义对象 a 以及对象数组 d,三次调用构造函数,当程序结束时亦三次调用析构函数,对于指针对象 b 并没有被
46、实例化,因此创建时不调用构造函数,指针对象时没有被删除,所以也不调用析构函数。故正确答案是 B。34.某类中有一个无参且无返回值的常成员函数 Show,则正确的 Show 函数原型是_。(分数:2.50)A.const void Show();B.void const Show();C.void Show() const; D.void Show(const);解析:解析 陔题考查的内容是常成员函数的说明形式,其形式为: 返回类型成员函数名(参数表)const; 根据题目要求知,正确答案为 C。35.若已定义了类 Vehicle,则下列派生类定义中,错误的是_。(分数:2.50)A.class Car:Vehicle/*类体略*/;B.class Car:public Car/*类体略*/; C.class Car:public Vehicle/*类体略*/;D.class Car:virtual public Vehicle/*类体略*/);解析:解析 该题考查的内容是派生类的继承,考生应该掌握:派生类继承方式有三种,即公有、私有和保护,当不指明继承方式时默认为私有继承,为了解决多继承中的二义性问题,我们可以通过虚类继承的方式继承即 D 的形式。所以 B 项是错误的。36.有如下程序