1、二级 C+-218 及答案解析(总分:69.00,做题时间:90 分钟)一、选择题(总题数:40,分数:69.00)1.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass(int i=0)cout1; MyClass(const MyClass MyClass retum*this; MyClass()cout4; ; int main() MyClass obj1(1),obj2(2),obj3(obj1); return0; 执行这个程序的输出结果是_。(分数:1.00)A.112444B.1
2、1114444C.121444D.113144442.有以下程序: #includeiostream using namespace std; Class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1,samplc s2) this-n=s1.n+s2.n; return(*this); void disp() cout“n”nendl; ; int main() sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp(); return 0;
3、 程序运行后,输出的结果是 _ 。(分数:2.00)A.n10B.n5C.n20D.n=153.有如下程序: #includeiostream using namespace std; int main() void function(double val); double val; function(val); coutval; return 0; void function(double val) val=3; 编译运行这个程序将出现的情况是_。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数4.有以下程序: #includeiostream us
4、ing namespace std; class R public: R(int r1,int r2) R1=r1; R2=r2; void print(); void print()corist; private: int R1,R2; ; void R:print() void R:print()coiist int main() R a(5,4); const R b(20,52); b.print(); return 0; 执行后的输出结果是_。(分数:1.00)A.5,4B.20,52C.0,0D.4,55.下面的函数调用为: fun(x+y,3,min(n-1,y)则 fun 的实
5、参个数是_。(分数:2.50)A.3B.4C.5D.66.软件详细设计的主要任务是确定每个模块的 _ 。(分数:2.00)A.算法和使用的数据结构B.外部接口C.功能D.编程7.以下选项中合法的用户标识符是 _ 。(分数:2.00)A.longB._2TestC.3DmaxD.dat8.若已经声明了函数原型“bool fun(bool a,int b=0);”,则下列重载函数声明中正确的是_。(分数:1.00)A.bool fun(bool a=true,int b=0);B.int fun(bool a,int );C.void fun(double a,int );D.void fun(b
6、ool a,int b=0);9.有如下程序段: int i=0,j=1; int / r=j;/ int*p=/ *p=r;/ 其中会产生编译错误的语句是_。(分数:1.00)A.B.C.D.10.将 E-R 图转换为关系模式时,实体和联系都可以表示为_。(分数:2.50)A.属性B键C.关系D域11.下面不属于需求分析阶段工作的是_。(分数:1.00)A.需求获取B.可行性研究C.需求分析D.撰写软件需求规格说明书12.有如下类定义: class Test public: Test()a=0;c=0;/ int f(int a)constthis-a=a;/ static int g()r
7、eturn a;/ voidh(intb)Test:b=b;/ private: int a; static int b; const int c; ; int Test:b=0; 在标注号码的行中,能被正确编译的是_。(分数:1.00)A.B.C.D.13.下列字符串中,正确的 C+标识符是 _ 。(分数:2.00)A.foo-1B.2bC.newD._25614.Windows 环境下,由 C+源程序文件编译而成的目标文件的扩展名是 _ 。(分数:2.00)A.cppB.exeC.objD.lik15.下列关系运算中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是(分数:2.
8、00)A.选择B.连接C.投影D并16.软件设计中划分模块的一个准则是_。(分数:1.00)A.低内聚低耦合B.高内聚低耦合C.低内聚高耦合D.高内聚高耦合17.下列关于栈的叙述正确的是_。(分数:1.00)A.栈顶元素最先被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.以上三种说法都不对18.下列关于类定义的说法中,正确的是_。(分数:2.00)A.类定义中包括数据成员和函数成员的声明B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义19.生成派生类对象时,派生类构造函数调用基类构造函数的条件是_。(分数:1.00)A.无需任何条件B
9、.基类中显式定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数20.有如下程序: #includeiostream using namespace std; classAA int k; protected: int n; void setK(int k)this-k=k; public: void setN(int n)this-n=n; ; class BB:public AA/*类体略*/; intmain() BB x; x.n=1; /1 x.setN(2); /2 x.k=3; /3 x.setK(4); /4 return 0; 在标注号码的四条
10、语句中正确的是_。(分数:2.00)A.1B.2C.3D.421.有两个关系 R 和 T 如下: (分数:2.50)A.选择B.投影C交D并22.类 MyClass 的定义如下: class MyClass public: MyClass()value=0; SetVariable(int i)value=i; private: int value; ; 则对下列语句序列正确的描述是_。(分数:1.00)A.语句 p=my;是把对象 my 赋值给指针变量 pB.语句 MyClass*p,my;会调用两次类 MyClass 的构造函数C.对语句*P.SetVariable(5)的调用是正确的D.
11、语句 p-SetVariable(5)与语句 my.SetVariable(5)等价23.已知在一个类体中包含如下函数原型:VOLUMEOPER ATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是_。(分数:1.00)A.这是运算符一的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变类的任何数据成员的值24.if 语句的语法格式可描述为: 格式 1:if(条件)语句 或 格式 2:if(条件)语句 1 else语句 2 关于上面的语法格式,下列表述中错误的是_。(分数:1.00)A.条件部分可以是一个 if 语句,例如 if
12、(if(a=0)B.语句部分可以是一个 if 语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交换语句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循环语句,例如 if()while()25.当使用 fstream 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 _ 。(分数:1.00)A.ios:inB.ios: outC.ios:in lios:outD.以上都不对26.下列关于输入输出流的叙述中,正确的是_。(分数:2.50)A.一个文件流可以与一个数据文件相联系B.cin 是专门从键盘输入数据的输入流类C.流运算符“”用来从输入流中读取数据D.宽
13、度设置的效果永久有效27.下列不属于 C+关键字的是(分数:2.50)A.defaultB.unsignedC.goD.try28.有如下类定义: class Point int x_,y_; public: Point():x_(0),y_(0) Point(int x,int y=0):x_(x),y_(y) ; 若执行语句 Point a(2),b3,*c4; 则 Point 类的构造函数被调用的次数是_。(分数:2.00)A.2 次B.3 次C.4 次D.5 次29.下列程序的输出结果是_。 #includeiostream using namespace std; int main(
14、) char a=“Hello,Test“; char*p=a; while(*p) coutchar(*p+“A“-“a“); else cout *p; p+; return 0; (分数:1.00)A.hello,testB.Hello,TestC.HELLO,TESTD.hELLO,tEST30.支持数据库各种操作的软件系统叫做 _ 。(分数:2.00)A.数据库管理系统B.文件系统C.数据库系统D.操作系统31.凡是函数中未指定存储类别的局部变量,其隐含的存储类型是 _ 。(分数:2.00)A.autoB.staticC.regiserD.extern32.下列叙述中正确的是(分数:
15、2.00)A.在模块化程序设计中,一个模块应尽量多的包括与其他模块联系的信息B.在自顶向下、逐步细化的设计过程中,首先应设计解决问题的每一个细节C.在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则D.在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法33.已知将运算符“+”和“*”作为类 Complex 的成员函数重载,设 c1 和 c2 是类 Complex 的对象,则表达式 c1+c2*c1 等价于_。(分数:2.00)A.c1.operator*(c2.operator+(c1)B.c1.operator+(c2.operator*(c1)C.c1.oper
16、ator*(c1.operator+(c2)D.c2.operator+(c1.operator*(c1)34.若在表达式“y/x”中,“/”是作为成员函数重载的运算符,则该表达式还可以表示为_。(分数:2.00)A.Operator/(y)B.operator/(x,y)C.operator/(x)D.operator/(y,x)35.下列关于函数模板的描述中,错误的是(分数:2.00)A.从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信息为准B.对于常规参数所对应的模板实参,任何情况下都不能省略C.虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参D.模板参数表不能为
17、空36.有如下两个类定义: class AA; class BB AA v1,*v2; BB v3; int*v4; ; 其中有一个成员变量的定义是错误的,这个变量是_。(分数:2.00)Av1Bv2Cv3Dv437.以下 for 语句中不是死循环的是 _ 。(分数:2.00)A.for(int i=0;i1;+i);B.for(int i=0;+i);C.for(int i=1;i0;+i);D.for(;);38.下列函数参数默认值定义错误的是 _ 。(分数:2.00)A.Fun(int x,int y=0)B.Fun(int x=100)C.Fun(int x=0,int y)D.Fun
18、(int x=f()(假定函数 f()已经定义)39.对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是_。(分数:2.50)A.公有或私有B.私有C.保护或私有D.公有或保护40.有如下程序: #includeiostream using namespace std; class Base public: void fun1()cout“Baseha/n“; virtual void fun2()cout“Base/n“; ; class Derived:public Base public: void fun1()cout“Derived/n“
19、; void fun2()cout“Derived/n“; ; void f(Baseb.fun2(); int main() Derived obj; f(obj); return 0; 执行这个程序的输出结果是_。(分数:2.00)A.BaseBaseB.BaseDerivedC.DerivedBaseD.DerivedDerived二级 C+-218 答案解析(总分:69.00,做题时间:90 分钟)一、选择题(总题数:40,分数:69.00)1.有如下程序: #includeiostream using namespace std; class MyClass public: MyCl
20、ass(int i=0)cout1; MyClass(const MyClass MyClass retum*this; MyClass()cout4; ; int main() MyClass obj1(1),obj2(2),obj3(obj1); return0; 执行这个程序的输出结果是_。(分数:1.00)A.112444 B.11114444C.121444D.11314444解析:解析 本题考查构造函数和复制构造函数以及重载运算符。本题中先后定义了两个对象obj1,obj2,依次输出 11,然后定义了对象 obj3,调用复制构造函数,输出 2,最后执行三次析构函数,输出 444。2
21、.有以下程序: #includeiostream using namespace std; Class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1,samplc s2) this-n=s1.n+s2.n; return(*this); void disp() cout“n”nendl; ; int main() sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp(); return 0; 程序运行后,输出的结果是 _ 。(分数:2.00)
22、A.n10B.n5C.n20D.n=15 解析:解析 本题考查 this 指针的使用类成员函数 add 中通过 this 指针实现私有数据成员 n 的赋值。3.有如下程序: #includeiostream using namespace std; int main() void function(double val); double val; function(val); coutval; return 0; void function(double val) val=3; 编译运行这个程序将出现的情况是_。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不
23、确定的数 解析:解析 此题考查的是函数参数的传递。C+语言中,函数在传递参数时,总是将实参的值传递给被调用函数的形参,即传值调用。因此,在函数中对形参所作的任何操作都不会改变实参的值。4.有以下程序: #includeiostream using namespace std; class R public: R(int r1,int r2) R1=r1; R2=r2; void print(); void print()corist; private: int R1,R2; ; void R:print() void R:print()coiist int main() R a(5,4); c
24、onst R b(20,52); b.print(); return 0; 执行后的输出结果是_。(分数:1.00)A.5,4B.20,52 C.0,0D.4,5解析:解析 使用 const 关键字修饰的对象称为常对象,题中对象 b 被声明为类 R 的常对象。使用const 关键字说明的成员函数称为常成员函数,类 R 中用 const 重载了函数 print()。在使用常对象和常成员函数时应注意的是:const 是函数类型的一个组成部分,因此在常成员函数部分也要带 const 关键字;常成员函数不能更新对象的数据成员,也不能调用该类中没有用 const 修饰的成员函数;如果将一个对象说明为常对
25、象,则通过该常对象只能调用它的常成员函数,不能调用其他的成员函数;const 关键字可以参与区分重载函数。5.下面的函数调用为: fun(x+y,3,min(n-1,y)则 fun 的实参个数是_。(分数:2.50)A.3 B.4C.5D.6解析:解析 在 C+中,形参列表是由逗号分开的,分别说明函数的各个参数。在 fun()函数中它包括三个形参:x+y,3 和 min(n-1,y);当调用一个函数时,实参与形参一对一匹配,所以实参个数也是 3个。6.软件详细设计的主要任务是确定每个模块的 _ 。(分数:2.00)A.算法和使用的数据结构 B.外部接口C.功能D.编程解析:7.以下选项中合法的
26、用户标识符是 _ 。(分数:2.00)A.longB._2Test C.3DmaxD.dat解析:8.若已经声明了函数原型“bool fun(bool a,int b=0);”,则下列重载函数声明中正确的是_。(分数:1.00)A.bool fun(bool a=true,int b=0);B.int fun(bool a,int );C.void fun(double a,int ); D.void fun(bool a,int b=0);解析:解析 本题考查函数重载相关知识,重载函数是函数的一种特殊情况,为方便使用,C+允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数
27、(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。A、B、D 选项的部分形参都与原函数相同,所以不能作为重载函数,选项 C 正确。9.有如下程序段: int i=0,j=1; int / r=j;/ int*p=/ *p=r;/ 其中会产生编译错误的语句是_。(分数:1.00)A. B.C.D.解析:解析 本题考查指针和引用。为引用,使用正确;中c=0;/ int f(int a)constthis-a=a;/ static int g()return a;/ voidh(intb)Test:b=b;/ private: int a; static int b;
28、 const int c; ; int Test:b=0; 在标注号码的行中,能被正确编译的是_。(分数:1.00)A.B.C.D. 解析:解析 只能通过构造函数的参数初始化列表对常数据成员进行初始化,本题中常数据成员为c。通过默认构造函数初始化 c,所以不正确。常成员函数只能引用本类中数据成员,而不能修改它,所以不正确。静态成员函数由于没有 this 指针,所以不能访问本类中的非静态成员,所以错误。13.下列字符串中,正确的 C+标识符是 _ 。(分数:2.00)A.foo-1B.2bC.newD._256 解析:14.Windows 环境下,由 C+源程序文件编译而成的目标文件的扩展名是
29、_ 。(分数:2.00)A.cppB.exeC.obj D.lik解析:解析 cpp 是 C+源文件的扩展名;exe 是可执行文件的扩展名;lik 是连接文件的扩展名。15.下列关系运算中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是(分数:2.00)A.选择B.连接 C.投影D并解析:解析 连接运算是对两个关系进行的运算,其意义是从两个关系的笛卡尔积中选出满足给定属性间一定条件的那些元组。而两个关系的笛卡尔积中的属性个数是两个原关系中的属性个数之和。即两个关系经连接运算后得到的新关系中属性个数多于原来关系中属性个数。正确答案是 B。16.软件设计中划分模块的一个准则是_。(分
30、数:1.00)A.低内聚低耦合B.高内聚低耦合 C.低内聚高耦合D.高内聚高耦合解析:解析 一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。17.下列关于栈的叙述正确的是_。(分数:1.00)A.栈顶元素最先被删除 B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.以上三种说法都不对解析:解析 栈是限定在一端进行插入删除的先入后出的线性表数据结构,栈顶元素最后被插入到栈中但是最先被删除;而栈底元素最先被插入,最后被删除。18.下列关于类定义的说法中,正确的是_。(分数:2.00)A.类定义中包括数据成员和函数成员的声明
31、B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。19.生成派生类对象时,派生类构造函数调用基类构造函数的条件是_。(分数:1.00)A.无需任何条件B.基类中显式定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数 解析:解析 派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类的构造函数时除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始
32、化。20.有如下程序: #includeiostream using namespace std; classAA int k; protected: int n; void setK(int k)this-k=k; public: void setN(int n)this-n=n; ; class BB:public AA/*类体略*/; intmain() BB x; x.n=1; /1 x.setN(2); /2 x.k=3; /3 x.setK(4); /4 return 0; 在标注号码的四条语句中正确的是_。(分数:2.00)A.1B.2 C.3D.4解析:解析 因为类 BB 公有
33、继承自类 AA,所以 AA 中的保护成员和公有成员在类 BB 中仍是保护成员和公有成员。一在选项 B 中调用了公有成员函数 setN(int n)this-n=n;,对保护成员 n 进行赋值操作。21.有两个关系 R 和 T 如下: (分数:2.50)A.选择 B.投影C交D并解析:解析 本题考查的知识点是关系运算。选择和投影都是对单个表进行运算,其结果都是一个关系。选择运算是选择满足条件的元组,投影则是满足条件的列。显然由关系 R 得到 T 是选择运算。22.类 MyClass 的定义如下: class MyClass public: MyClass()value=0; SetVariabl
34、e(int i)value=i; private: int value; ; 则对下列语句序列正确的描述是_。(分数:1.00)A.语句 p=my;是把对象 my 赋值给指针变量 pB.语句 MyClass*p,my;会调用两次类 MyClass 的构造函数C.对语句*P.SetVariable(5)的调用是正确的D.语句 p-SetVariable(5)与语句 my.SetVariable(5)等价 解析:解析 选项 A,语句 p=my;是把对象 my 的地址值赋值给指针变量 P;选项 B,语句 MyClass*p,my;中由于 p 只是一个指向对象的指针,因此定义指针 p 不调用构造函数,
35、所以此语句只调用一次构造函数:对成员函数的引用可以通过两种形式:指针-成员函数(形参表),或者对象名,成语函数名(形参表),故选项 C 错误,选项 D 正确。23.已知在一个类体中包含如下函数原型:VOLUMEOPER ATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是_。(分数:1.00)A.这是运算符一的重载运算符函数B.这个函数所重载的运算符是一个一元运算符 C.这是一个成员函数D.这个函数不改变类的任何数据成员的值解析:解析 本题考核运算符的重载。题中语句为运算符一这是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有
36、用 const 修饰的成员函数。24.if 语句的语法格式可描述为: 格式 1:if(条件)语句 或 格式 2:if(条件)语句 1 else语句 2 关于上面的语法格式,下列表述中错误的是_。(分数:1.00)A.条件部分可以是一个 if 语句,例如 if(if(a=0) B.语句部分可以是一个 if 语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交换语句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循环语句,例如 if()while()解析:解析 本题考查 if 语句,if 语句的条件部分不能嵌套 if 语句,所以 A 选项错误;B 选项就是 if语句嵌套;C
37、选项其实就是将判断条件颠倒,然后执行语句也颠倒,所以效果一样;D 选项也正确。25.当使用 fstream 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 _ 。(分数:1.00)A.ios:inB.ios: outC.ios:in lios:outD.以上都不对 解析:26.下列关于输入输出流的叙述中,正确的是_。(分数:2.50)A.一个文件流可以与一个数据文件相联系 B.cin 是专门从键盘输入数据的输入流类C.流运算符“”用来从输入流中读取数据D.宽度设置的效果永久有效解析:解析 文件流是以外存文件为输入输出对象的数据流。每个文件流都应该与一个打开的文件相联系。cin 是
38、类 istream_withassign 的一个对象。运算符“”用于数据输出。宽度设置的效果只对一次输入或输出有效。27.下列不属于 C+关键字的是(分数:2.50)A.defaultB.unsignedC.go D.try解析:28.有如下类定义: class Point int x_,y_; public: Point():x_(0),y_(0) Point(int x,int y=0):x_(x),y_(y) ; 若执行语句 Point a(2),b3,*c4; 则 Point 类的构造函数被调用的次数是_。(分数:2.00)A.2 次B.3 次C.4 次 D.5 次解析:解析 此题考查
39、的是类的构造函数。构造函数在对象创建的时候由系统自动调用。在 Point a(2),b3,*c4语句中:a(2)是定义一个对象并传入构造函数 2,所以此时会调用以此构造函数;b3是定义一个包含 3 个对象的数组,所以构造函数会被调用 3 次;*c4定义的是 4 个 Point 类对象指针的数组,它并没有创建任何 Point 对象,所以不调用构造函数。29.下列程序的输出结果是_。 #includeiostream using namespace std; int main() char a=“Hello,Test“; char*p=a; while(*p) coutchar(*p+“A“-“a
40、“); else cout *p; p+; return 0; (分数:1.00)A.hello,testB.Hello,TestC.HELLO,TEST D.hELLO,tEST解析:解析 用一个指针变量 p 指向字符数组 a,在 while 循环中,当不指向数组尾时,将小写字母转换为大写字母,然后将其输出。30.支持数据库各种操作的软件系统叫做 _ 。(分数:2.00)A.数据库管理系统 B.文件系统C.数据库系统D.操作系统解析:31.凡是函数中未指定存储类别的局部变量,其隐含的存储类型是 _ 。(分数:2.00)A.auto B.staticC.regiserD.extern解析:解析
41、 变量说明时使用 auto 修饰的局部变量是自动变量,auto 经常省略,在未指定存储类别时,默认为 auto。32.下列叙述中正确的是(分数:2.00)A.在模块化程序设计中,一个模块应尽量多的包括与其他模块联系的信息B.在自顶向下、逐步细化的设计过程中,首先应设计解决问题的每一个细节C.在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则 D.在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法解析:解析 在模块化设计中,要求将一个大程序按人们能理解的大小规模进行分解,使每个模块都能易于理解,各模块的功能尽量单一,各模块之间的联系尽量的少。因此,选项 A 中的说法是
42、错误的。自顶向下、逐步细化的设计过程,主要包括两个方面:一是将一个复杂问题的解法分解和细化成由若干模块组成的层次结构;二是将一个模块的功能逐步分解细化为一系列的处理步骤,直到某种程序设计语言的语句或某种机器指令。即在自顶向下、逐步细化的设计过程中,是按照先全局后局部,先整体后细节、先抽象后具体的方法设计程序。因此选项 B 中的说法也是错误的。 在模块化程序设计中每一个模块完成一个功能,相对独立,要求一个模块内部的控制结构也要符合结构化原则。因此,选项 C 中的说法是正确的。由于在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则,因此,在程序设计过程中,结构化程序设计方法与模块化程序设
43、计方法是要同时采用的。因此,选项 D 中的说法是错误的。33.已知将运算符“+”和“*”作为类 Complex 的成员函数重载,设 c1 和 c2 是类 Complex 的对象,则表达式 c1+c2*c1 等价于_。(分数:2.00)A.c1.operator*(c2.operator+(c1)B.c1.operator+(c2.operator*(c1) C.c1.operator*(c1.operator+(c2)D.c2.operator+(c1.operator*(c1)解析:解析 表达式 c1+c2*c1 的含义是 c1 加上 c2 与 c1 的积。34.若在表达式“y/x”中,“/
44、”是作为成员函数重载的运算符,则该表达式还可以表示为_。(分数:2.00)A.Operator/(y)B.operator/(x,y)C.operator/(x) D.operator/(y,x)解析:35.下列关于函数模板的描述中,错误的是(分数:2.00)A.从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信息为准B.对于常规参数所对应的模板实参,任何情况下都不能省略 C.虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参D.模板参数表不能为空解析:解析 模板实参的信息优先级高于函数实参,而且模板参数表不能为空。36.有如下两个类定义: class AA; class
45、BB AA v1,*v2; BB v3; int*v4; ; 其中有一个成员变量的定义是错误的,这个变量是_。(分数:2.00)Av1Bv2Cv3 Dv4解析:解析 在定义类的数据成员时,类中的数据成员可以是任意类型,包括整型、浮点型、字符符型、数组、指针和引用等,也可以是对象。但是要注意,只有另外一个类的对象,才可以作为该类的成员,即作为类的成员对象存在。自身类的对象是不可以作为自身类的成员存在,但自身类的指针可以。对于本题,在定义类 BB 时,不能包括其对象 v3。37.以下 for 语句中不是死循环的是 _ 。(分数:2.00)A.for(int i=0;i1;+i); B.for(in
46、t i=0;+i);C.for(int i=1;i0;+i);D.for(;);解析:解析 本题考查循环语句 for 的使用。for 循环开始时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。在 for 语句中,如果省略了终止条件判断部分,并且在语句中没有 break,或终止条件判断部分始终没有终止,都将出现死循环。38.下列函数参数默认值定义错误的是 _ 。(分数:2.00)A.Fun(int x,int y=0)B.Fun(int x=100)C.Fun(int x=0,int y)D.Fun(int x=f()(假定函数 f()已经定义) 解析:39.对于通过公有继承定义的派生类,若其成员函数可以直接访问基类的某个成员,说明该基类成员的访问权限是_。(分数:2.50)A.公有或私有B.私有C.保护或私有D.公有或保护 解析:解析 公有继承时,基类成员继承到派生类中访问权限保持不变。能够在派生类中访问基类公有和保护成员。40.有如下程序: #includeiostream using namespace std; class Base public: void fun1()cout“Baseha/n“; virtual void fun2()cout