1、二级 C+笔试-410 及答案解析(总分:87.00,做题时间:90 分钟)一、选择题(总题数:35,分数:64.00)1.下列选项中,不属于模块间耦合的是( )。A) 数据耦合 B) 同构耦合C) 异构耦合 D) 公用耦合(分数:2.00)A.B.C.D.2.以下程序的执行后,x 和 y的值是 _ 。#include iostream. hclass Samplepublic:int x;int y;void disp() cout“x=“x“, y=“yend1;void main()int Sample: :*pc;Sample s;pc=s. *pc=10;pc=s. *pc=.20;
2、s. disp ();A) x=10, y=20 B) x=20, y=10C) x=10, y=10 D) x=20, y=20(分数:2.00)A.B.C.D.3.下列叙述中正确的是( )。A) C程序的基本组成单位是语句 B) C 程序中的每一行只能写一条语句C) 简单 C语句必须以分号结束 D) C语句必须在一行内写完(分数:2.00)A.B.C.D.4.sizeof (float) 是A) 一个双精度型表达式 B) 一个整型表达式C) 一种函数调用 D) 一个不合法的表达式(分数:2.00)A.B.C.D.5.下面关于 C+流的叙述中,正确的是( )。A) cin是一个输入流对象B)
3、 可以用 if stream定义一个输出流对象C) 执行语句序列 char*y=“PQMN”;couty;将输出字符串”PQMN”的地址D) 执行语句序列 char x80;cin.getline(x,80);时。若键入“Happy new year”,则,中的字符串是“Happy”(分数:2.00)A.B.C.D.6.若有定义如下:char x10=“Visual C“,y=“+6.0“; 则下列选项中对字符串操作错误的是( )。A) strcpy(x,y); B) strcat(x,y); C) gets(x); D) coutstrlen(x);(分数:2.00)A.B.C.D.7.有以
4、下程序段:int k=0;while(k=1)k+;while循环执行的次数是( )。A) 无限次 B) 有语法错,不能执行C) 一次也不执行 D) 执行 1次(分数:2.00)A.B.C.D.8.下列叙述中正确的是( )。A) 一个算法的空间复杂度大,则其时间复杂度必定大B) 一个算法的空间复杂度大,则其时间复杂度必定小C) 一个算法的时间复杂度大,则其空间复杂度必定小D) 上述三种说法都不对(分数:2.00)A.B.C.D.9.判断字符型变量 ch是否为大写英文字母,应使用表达式A) chA j=strlen(a)couti j;A) 6 6 B) 5 6C) 1 5 D) 6 5(分数:
5、2.00)A.B.C.D.13.有如下函数模板定义:templateT1 sum(T1 a1)return(a1+a2+a3);则以下调用中正确的是( )。A) sumint,4,3(5); B) sum4,3(5); C) sumint,int,int(5); D) sum(5);(分数:2.00)A.B.C.D.14.有下列二叉树,对此二叉树中序遍历的结果为( )。(分数:2.00)A.B.C.D.15.有以下程序:#include iostreamusing namespace std;class sampleprivate:int n;public:sample()sample(int
6、 m)n=m;void addvalue(int m)sample s;s.n=n+m;*this=s;void disp ()cout“n=“nendl;int main()sample s(10);s.addvalue(5);s.disp();return 0;程序运行后的输出结果是A) n=10 B) n=5 C) n=15 D) n=20(分数:2.00)A.B.C.D.16.关于语句#includeiostreamusing namespace std;void main()cout100.8989663;comfixed100.8989663;coutscientific100.8
7、989663;的输出结果为( )A) 100.899 100.898966 1.008990e+002B) 100.8989663 100.898966 1.008990e+002C) 100.899 100.898966 1.008989e+002D) 100.899 100.8989663 1.008989e+002(分数:2.00)A.B.C.D.17.以下不属于构造函数特征的是A) 构造函数名与类名相同 B) 构造函数可以重载C) 构造函数可以设置默认参数 D) 构造函数必须指定函数类型(分数:2.00)A.B.C.D.18.有如下程序: int x=3: d0 x-=2: coutx
8、: while(!(-x); 执行这个程序的输出结果是 A) 1 B) 30 C) 12 D) 死循环(分数:2.00)A.B.C.D.19.能正确表示逻辑关系:“a10 或 a0”的 C+语言表达式是A) a=10 or a=0 B) a=0|a=10C) a=10 class Obj static int i;public :Obj() i+; -Obj() i- -; static int getVal() return i;int Obj: :i =0;void f() Obj ob2 ; cout ob2. getVal() ;int main() Obj obl ;f();Obj
9、* ob3 = new Obj ; cout ob3 - getVal() ;delete ob3 ; cout Obj : :getVal() ;return 0 ;执行这个程序的输出结果是( )。A) 232 B) 231 C) 222 D) 221(分数:1.00)A.B.C.D.21.在 C+中,编译系统自动为一个类生成缺省构造函数的条件是( )。A) 该类没有定义任何有参构造函数B) 该类没有定义任何无参构造函数C) 该类没有定义任何构造函数D) 该类没有定义任何成员函数(分数:2.00)A.B.C.D.22.以下程序的输出结果是( )。#includeiostream#includ
10、estdlibusing namespace std;void func(char *m)+m;cout*mendl;main()static char *a=“MORNING“,“AFTERNOON“,“EVENING“);char *n;n=a;func(n);system(“PAUSE“);return 0;A) 为空 B) MORNINGC) AFTERNOON D) EVENING(分数:2.00)A.B.C.D.23.下列各组类型声明符中,含义相同的一组是( )。A) unsigned long int和 long B) signed short int和 shortC) unsi
11、gned short 和 short D) short int 和 int(分数:2.00)A.B.C.D.24.在重载运算符函数时,下面运算符必须重载为类的成员函数的是( )。A) + B) - C) + D) -(分数:2.00)A.B.C.D.25.关于关键字 class和 typename,下列表述中正确的是( )。A) 程序中的 typename都可以替换为 classB) 程序中的 class都可以替换为 typenameC) 在模板形参表中只能用 typename来声明参数的类型D) 在模板形参表中只能用 class或 typename来声明参数的类型(分数:2.00)A.B.C
12、.D.26.以下程序的功能是按顺序读入 10名学生 4门课程的成绩,计算出每位学生的平均分并输出:main( )int n, k,float score, sum, ave;sum=0.0;for(n=1; n=10; n+)for(k=1;k=4;k+)cinscore;sum+=score;ave= sum/4.0cout“No“n“:“aveend1;上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是A) sum=0.0B) sum+=scoreC) ave=sun/4.0D) cout“No“n“:“aveend1;(分数:2.00)A.B.C.D.27
13、.下列程序的执行结果是( )。#includeiostream.h#includestdlib.hclass TestClasspublic:intx,y;TestClass()x=y=0;TestClass(int a,int b)x=a;y=b;void disp()cout“X“=“X“,y=“yendl;void main()TestClass sl(2,3);s1.disp();A) x=2,y=2 B) x=3,y=3 C) x=2,y=3 D) x=3,y=2(分数:2.00)A.B.C.D.28.有以下程序mian()int i,j;for(i=1;i4;i+)for(j=i;
14、j4;j+) printf(“%d*%d=%d “,i,j,i*j);printf(“/n“);程序运行后的输出结果是_。A) 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3B) 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9C) 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9D) 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9(分数:2.00)A.B.C.D.29.下列关于关系运算的叙述中正确的是A) 投影、选择、连接是从二维表的行的方向来进行运算B) 并、交、差是从二维表的列的方向来进行运算C)
15、 投影、选择、连接是从二维表的列的方向来进行运算D) 以上三种说法都不对(分数:2.00)A.B.C.D.30.设有定义 int a1;float f1.2;char ca;,则下列表示错误的是A) a; B) f-; C) c; D) 8;(分数:2.00)A.B.C.D.31.有下列程序:#includestdio.hvoid main()char *a=“abcd“,“ef“,“gh“,“ijk“);int i;for(i=0;i4;i+)printf(“%c“,*ai);程序运行后的输出结果是( )。A) aegi B) dfhk C) abcd D) abcdefghijk(分数:2
16、.00)A.B.C.D.32.如果表达式 y*x+十中,“*”是作为成员函数重载的运算符,“+”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为A) x.operator+(0).operator *(y);B) operator * (x.operator+(0),y);C) y.operator * (operator+(x,0)D) operator * (operator+(x,0),y)(分数:1.00)A.B.C.D.33.C+语言类体系中,不能被派生类继承的有( )。A) 转换函数 B) 构造函数C) 虚函数 D) 静态成员函数(分数:2.00)A.B.C.
17、D.34.下列关于运算符重载的叙述中,正确的是A)通过运算符重载,可以定义新的运算符 B)有的运算符只能作为成员函数重载C)若重载运算符+,则相应的运算符函数名是+ D)重载一个二元运算符时,必须声明两个形参(分数:1.00)A.B.C.D.35.已知一个类 A的定义如下,则执行“Ax(3); ”语句后,x.a 和 x.b的值分别为 _。class Aint a, b;public:A(int aa=1,int bb=0)a=aa;b=bb ;A) 1和 0 B) 3和 1C) 1和 3 D) 3和 0(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:23.00)36.有如下的
18、程序:#includeiostreamusing namespace std;class ATfriend ostream class MyClasspublic:MyClass();MyClass();static int s;void SetValue(int val);int MyClass:s=0;MyClass:MyClass()s+;void MyClass:SetValue(int val)(s=val;int main()MyClass my3,*p;p=my;for(int k=0;k3;k+)p-SetValue(k+l);p+;coutMyClass:send1;retu
19、rn 0;运行后的输出结果是_。(分数:1.00)填空项 1:_43.语句 coutsetiosflags(ios:showpos)38“-38end1;的输出结果为 1。(分数:2.00)填空项 1:_44.若,将一个二元运算符重载为类的成员函数,其形参个数应该是 1 个。(分数:2.00)填空项 1:_45.在下面横线上填上适当的语句,完成程序。#includeiostreamusing namespace std;class Baseint x;public:Base(int i)x=i;Base();class Derived:public Basepublic:_/完成类 Deriv
20、e构造函数的定义;int main()Derived Obj;return 0;在横线处应填入的语句是_。(分数:1.00)填空项 1:_46.若要把类 A定义为 B的友元类,则应在类 B的定义中加入声明语句 1。(分数:2.00)填空项 1:_47.Staff类含有血型数据成员 ID,两个 Staff对象相等是指它们的 ID相同。下面的函数重载了运算符=,它用来判断两个 Staff对象是否相等,相等时返回 true,否则返回 false。请将横线处缺失部分补充完整。bool Staff:Staff=(const Staff int y;void disp() cout“x=“x“, y=“y
21、end1;void main()int Sample: :*pc;Sample s;pc=s. *pc=10;pc=s. *pc=.20;s. disp ();A) x=10, y=20 B) x=20, y=10C) x=10, y=10 D) x=20, y=20(分数:2.00)A. B.C.D.解析:3.下列叙述中正确的是( )。A) C程序的基本组成单位是语句 B) C 程序中的每一行只能写一条语句C) 简单 C语句必须以分号结束 D) C语句必须在一行内写完(分数:2.00)A.B.C. D.解析:解析 本题考查 C语言的基本概念。C 语言的源程序是由函数构成的,其基本单位是函数,
22、每一个函数完成相对独立的功能,其中至少包括一个主函数;C 语言的书写格式自由,一行可写多条语句,一条语句也可写在不同行上;C 语言规定每个语句以分号结束。可随时添加注释,对程序没影响。4.sizeof (float) 是A) 一个双精度型表达式 B) 一个整型表达式C) 一种函数调用 D) 一个不合法的表达式(分数:2.00)A.B. C.D.解析:解析 该函数用于数据类型和变量。注意: sizeof 操作符不能用于函数、不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、void 类型等。5.下面关于 C+流的叙述中,正确的是( )。A) cin是一个输入流
23、对象B) 可以用 if stream定义一个输出流对象C) 执行语句序列 char*y=“PQMN”;couty;将输出字符串”PQMN”的地址D) 执行语句序列 char x80;cin.getline(x,80);时。若键入“Happy new year”,则,中的字符串是“Happy”(分数:2.00)A. B.C.D.解析:解析 本题考查 C+洗的概念和 I/()的格式化。cln 是 lstream类的对象,即输入流对象。ifstream是输入文件流类不能定义个输出流对象。getline 函数功能是允许从输入流中读取多个字符,并且允许指定输入终止,在读取完成后,从读取的内容中删除读终止
24、字符,所以 D选项中的语句序列后 x中字符串应该是”Happy new year”。6.若有定义如下:char x10=“Visual C“,y=“+6.0“; 则下列选项中对字符串操作错误的是( )。A) strcpy(x,y); B) strcat(x,y); C) gets(x); D) coutstrlen(x);(分数:2.00)A.B. C.D.解析:解析 选项 A将字符数组 y的内容复制到字符数组 x中,操作后 x的内容为+6.0,而字符数组 y不变;选项 C将键盘输入字符串赋给 x字符数组;选项 D输出字符串 x的长度;而选项 B 要将字符数组y的内容连接到字符数组 x的后面由
25、于连接后的字符串长度为 14(8+5+1)字节,超过字符数组 x的声明长度,因此操作不合法。7.有以下程序段:int k=0;while(k=1)k+;while循环执行的次数是( )。A) 无限次 B) 有语法错,不能执行C) 一次也不执行 D) 执行 1次(分数:2.00)A. B.C.D.解析:解析 本来 while中的表达式应为 k=1,而本题却为 k=1,是赋值表达式而不是逻辑表达式。因此,编译器将其值一直认为是 1,因此表达式一直为真,陷入无限次的循环。8.下列叙述中正确的是( )。A) 一个算法的空间复杂度大,则其时间复杂度必定大B) 一个算法的空间复杂度大,则其时间复杂度必定小
26、C) 一个算法的时间复杂度大,则其空间复杂度必定小D) 上述三种说法都不对(分数:2.00)A.B.C.D. 解析:解析 算法的时间复杂度和算法的空间复杂度从不同的角度来衡量算法的执行情况,它们之间没有内在联系。9.判断字符型变量 ch是否为大写英文字母,应使用表达式A) chA j=strlen(a)couti j;A) 6 6 B) 5 6C) 1 5 D) 6 5(分数:2.00)A.B.C.D. 解析:13.有如下函数模板定义:templateT1 sum(T1 a1)return(a1+a2+a3);则以下调用中正确的是( )。A) sumint,4,3(5); B) sum4,3(
27、5); C) sumint,int,int(5); D) sum(5);(分数:2.00)A. B.C.D.解析:解析 本题考查的函数模板的使用,有时不能根据用户传进来的参数决定所有模板函数的值类型,如函数的返回值,还有用户希望自己指定参数类型,这时就需要显式地指出参数模板的类型,显示指定模板的类型格式为:返回值类型函数模板参数类型表(参数表)。14.有下列二叉树,对此二叉树中序遍历的结果为( )。(分数:2.00)A.B. C.D.解析:解析 对二叉树的中序遍历是指首先遍历左于树,然后访问根结点,最后遍历右子树在遍历左、右子树时,依旧按照“左子树根结点右于树”的顺序。本题的遍历顺序是这样的:
28、首先访问左于树:BDEY;在左子树 BDEY中,也按中序遍历,先访问左于树 DY:在左子树 DY中,也按中序遍历,先访问左于树,左子树没有,则访问根结点 D,然后访问右子树 Y;接着访问根 B,再访问右子树 E;访问左子树 BDEY后,接着访问根结点 A,然后访问右于树 CFXZ;同理,可得右子树 CFXZ的访问顺序为 FCZX。15.有以下程序:#include iostreamusing namespace std;class sampleprivate:int n;public:sample()sample(int m)n=m;void addvalue(int m)sample s;s
29、.n=n+m;*this=s;void disp ()cout“n=“nendl;int main()sample s(10);s.addvalue(5);s.disp();return 0;程序运行后的输出结果是A) n=10 B) n=5 C) n=15 D) n=20(分数:2.00)A.B.C. D.解析:解析 本题考核 this指针的应用。上述程序中 sample类定义了一个 addvalue非静态成员函数。addvalue函数的原型是:void addvalue(sample *this,int m);,该函数的第一个参数是执行该类对象的一个指针即 this指针。由于这个参数是系统
30、隐含的,所以我们在定义该成员函数时并没有看到这样一个参数。在成员函数的定义体中,可以通过 this访问这一参数。上述程序的最后输出结果是 15。16.关于语句#includeiostreamusing namespace std;void main()cout100.8989663;comfixed100.8989663;coutscientific100.8989663;的输出结果为( )A) 100.899 100.898966 1.008990e+002B) 100.8989663 100.898966 1.008990e+002C) 100.899 100.898966 1.00898
31、9e+002D) 100.899 100.8989663 1.008989e+002(分数:2.00)A. B.C.D.解析:17.以下不属于构造函数特征的是A) 构造函数名与类名相同 B) 构造函数可以重载C) 构造函数可以设置默认参数 D) 构造函数必须指定函数类型(分数:2.00)A.B.C.D. 解析:解析 类的构造函数不能指定函数类型,由系统采取默认的处理方式,不需要用户参与。18.有如下程序: int x=3: d0 x-=2: coutx: while(!(-x); 执行这个程序的输出结果是 A) 1 B) 30 C) 12 D) 死循环(分数:2.00)A.B.C. D.解析:
32、解析 Do.while()循环是先执行循环体,然后判断条件。第一次进入循环 x=1,打印 1,第二次进入循环 x=0,执行 x-=2后,x=-2,打印 x,退出循环。19.能正确表示逻辑关系:“a10 或 a0”的 C+语言表达式是A) a=10 or a=0 B) a=0|a=10C) a=10 class Obj static int i;public :Obj() i+; -Obj() i- -; static int getVal() return i;int Obj: :i =0;void f() Obj ob2 ; cout ob2. getVal() ;int main() Ob
33、j obl ;f();Obj * ob3 = new Obj ; cout ob3 - getVal() ;delete ob3 ; cout Obj : :getVal() ;return 0 ;执行这个程序的输出结果是( )。A) 232 B) 231 C) 222 D) 221(分数:1.00)A.B.C.D. 解析:解析 本题考查构造函数和析构函数的调用顺序,调用顺序为先构造的后析构,后构造的先析构。本题中先定义了一个对象 ob1,会执行构造函数,那么 i就变为了 1;再执行函数 f后,由于又定义了一个对象 ob2,所以再次执行构造函数,i 就变为了 2,输出了 2。函数执行完后执行析
34、构函数,i 变为了1,然后又定义了对象指针,i 变为了 2。释放 ob3后,i 变为了 1,所以答案为 D。21.在 C+中,编译系统自动为一个类生成缺省构造函数的条件是( )。A) 该类没有定义任何有参构造函数B) 该类没有定义任何无参构造函数C) 该类没有定义任何构造函数D) 该类没有定义任何成员函数(分数:2.00)A.B.C. D.解析:解析 在类定义时没有定义任何构造函数时,则编译器自动生成一个不带参数的缺省构造函数,其格式如下:类名:缺省构造函数名()按构造函数的规定,缺省构造函数名同类名。缺省构造函数的这种格式也可由程序员定义在类体中。在程序中定义一个对象而没有指明初始化时,则编
35、译器便按缺省构造函数来初始化该对象。用缺省构造函数对对象初始化时,则将对象的所有数据成员都初始化为零或空。22.以下程序的输出结果是( )。#includeiostream#includestdlibusing namespace std;void func(char *m)+m;cout*mendl;main()static char *a=“MORNING“,“AFTERNOON“,“EVENING“);char *n;n=a;func(n);system(“PAUSE“);return 0;A) 为空 B) MORNINGC) AFTERNOON D) EVENING(分数:2.00)A
36、.B.C. D.解析:23.下列各组类型声明符中,含义相同的一组是( )。A) unsigned long int和 long B) signed short int和 shortC) unsigned short 和 short D) short int 和 int(分数:2.00)A.B. C.D.解析:24.在重载运算符函数时,下面运算符必须重载为类的成员函数的是( )。A) + B) - C) + D) -(分数:2.00)A.B.C.D. 解析:解析 =(),-运算符不能够重载为类的友元函数。25.关于关键字 class和 typename,下列表述中正确的是( )。A) 程序中的
37、typename都可以替换为 classB) 程序中的 class都可以替换为 typenameC) 在模板形参表中只能用 typename来声明参数的类型D) 在模板形参表中只能用 class或 typename来声明参数的类型(分数:2.00)A. B.C.D.解析:解析 在模板中,定义模板类型 templateclass T和 templatetypename T都是一样的,有时用 class容易引起混淆,所以在标准化时引入了关键字 typename。26.以下程序的功能是按顺序读入 10名学生 4门课程的成绩,计算出每位学生的平均分并输出:main( )int n, k,float s
38、core, sum, ave;sum=0.0;for(n=1; n=10; n+)for(k=1;k=4;k+)cinscore;sum+=score;ave= sum/4.0cout“No“n“:“aveend1;上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是A) sum=0.0B) sum+=scoreC) ave=sun/4.0D) cout“No“n“:“aveend1;(分数:2.00)A. B.C.D.解析:解析 本题编译没有错误,但是执行结果确实错误的。细心的考生可以发现,第一个考生的乘积输入完之后,sun 的值并没有被清空,接着累加第二个考生
39、的分数,随后进行四门平均是错误的,所以需要内层循环和平均值计算完毕后进行 sum的清空。27.下列程序的执行结果是( )。#includeiostream.h#includestdlib.hclass TestClasspublic:intx,y;TestClass()x=y=0;TestClass(int a,int b)x=a;y=b;void disp()cout“X“=“X“,y=“yendl;void main()TestClass sl(2,3);s1.disp();A) x=2,y=2 B) x=3,y=3 C) x=2,y=3 D) x=3,y=2(分数:2.00)A.B.C.
40、 D.解析:解析 由主函数入手,定义了类 TestClass的对象 s1(2,3),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的“TestClass(int a,int b)x=a;y=b;)”。然后引用成员函数disp(),则输出为“cout”x=“x”,y=“yendl;”。即 x=2,y=3。28.有以下程序mian()int i,j;for(i=1;i4;i+)for(j=i;j4;j+) printf(“%d*%d=%d “,i,j,i*j);printf(“/n“);程序运行后的输出结果是_。A) 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*
41、1=3B) 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9C) 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9D) 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9(分数:2.00)A.B. C.D.解析:29.下列关于关系运算的叙述中正确的是A) 投影、选择、连接是从二维表的行的方向来进行运算B) 并、交、差是从二维表的列的方向来进行运算C) 投影、选择、连接是从二维表的列的方向来进行运算D) 以上三种说法都不对(分数:2.00)A.B.C. D.解析:解析 在关系模型的数据语言中,一般除了运用常规的集合运算(并、交、差、
42、笛卡尔积等)外,还定义了一些专门的关系运算,如投影、选择、连接等运算。前者是将关系(即二维表)看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;后者主要是从二维表的列的方向来进行运算。因此,选项A与 B中的说法都是错误的,而选项 C中的说法是正确的。30.设有定义 int a1;float f1.2;char ca;,则下列表示错误的是A) a; B) f-; C) c; D) 8;(分数:2.00)A.B.C.D. 解析:解析 、运算符不能用于常量表达式。31.有下列程序:#includestdio.hvoid main()char *a=“abcd“,“ef“,“gh“,“ijk
43、“);int i;for(i=0;i4;i+)printf(“%c“,*ai);程序运行后的输出结果是( )。A) aegi B) dfhk C) abcd D) abcdefghijk(分数:2.00)A. B.C.D.解析:解析 *a表示一个字符串数组,for 循环的作用是输出字符串数组中每一次字符串的第一个字符。所以正确答案为选项 A。32.如果表达式 y*x+十中,“*”是作为成员函数重载的运算符,“+”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为A) x.operator+(0).operator *(y);B) operator * (x.operator
44、+(0),y);C) y.operator * (operator+(x,0)D) operator * (operator+(x,0),y)(分数:1.00)A.B.C. D.解析:解析 本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符 +,且 c1、c2都是该类的对象,则 c1.operator+(c2)与 c1+c2含义相同。如果+作为该类的非成员函数重载,则operator十(c1,c2)与 c1+c2含义相同。同理,运算符*作为成员函数重载,则广(x+)与yoperator*(x+)含义相同,后缀什作为友元函数重载,那么 x+与 operator+(x,0)含义相同
45、,所以选项 C是正确的。33.C+语言类体系中,不能被派生类继承的有( )。A) 转换函数 B) 构造函数C) 虚函数 D) 静态成员函数(分数:2.00)A.B. C.D.解析:解析 派生类对象的数据结构是由基类中说明的数据成员和派生类中说明的数据成员共同构成,所以不能继承基类的构造函数,必须重新定义。34.下列关于运算符重载的叙述中,正确的是A)通过运算符重载,可以定义新的运算符 B)有的运算符只能作为成员函数重载C)若重载运算符+,则相应的运算符函数名是+ D)重载一个二元运算符时,必须声明两个形参(分数:1.00)A.B. C.D.解析:解析 一般运算符重载可以采用成员函数方式或友元方
46、式。但成员运算符(.),指向成员的指针,作用域运算符(:),条件运算符(?:)只能采用成员函数方式;重载运算符(+),对应的运算符函数名是operator+();重载一个二元运算符时,只需声明一个形参,左操作数毋须用参数输入,而是通过隐含的this指针传入。35.已知一个类 A的定义如下,则执行“Ax(3); ”语句后,x.a 和 x.b的值分别为 _。class Aint a, b;public:A(int aa=1,int bb=0)a=aa;b=bb ;A) 1和 0 B) 3和 1C) 1和 3 D) 3和 0(分数:2.00)A.B.C.D. 解析:二、填空题(总题数:15,分数:2
47、3.00)36.有如下的程序:#includeiostreamusing namespace std;class ATfriend ostream class MyClasspublic:MyClass();MyClass();static int s;void SetValue(int val);int MyClass:s=0;MyClass:MyClass()s+;void MyClass:SetValue(int val)(s=val;int main()MyClass my3,*p;p=my;for(int k=0;k3;k+)p-SetValue(k+l);p+;coutMyClass:send1;return 0;运行后的输出结果是_。(分数:1.00)填空项 1:_ (正确答案:3)解析:解析 本题考核静态数据成员。本题程序中把变量 s定义为静态数据成员,它被 MyClass 类的所有对象所共享,但它不属于类的任何一个对象,它的作用域是类范围。在类 MyClass的构造函数中,每创建一个对象,s 就增 1,由此可知 s用来记录建立对象的个数。