1、国家计算机二级(C+)89 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.以下哪个基类中的成员函数表示纯虚函数?(分数:2.00)A.virtual void vf(int)B.void vf(int)=0C.virtual void vf(=0)D.virtual void yf(int) 2.要想使 2378965421 的输出为 237887 应用的语句是( )。(分数:2.00)A.一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可能出现二义性B.解决二义性可以用对成员名的限定法
2、C.父类和子类中同时出现同名函数,也可能存在二义性D.一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性3.数据库设计的根本目标是要解决_。 (分数:2.00)A.数据共享问题B.数据安全问题C.大量数据存储问题D.简化数据维护4.已知枚举类型声明语句为: enum COLORWHITE,YELLOW,GREEN5,RED,BLACK10;则下列说法中错误的是(分数:2.00)A.枚举常量 YELLOW 的值为 1B.枚举常量 RED 的值为 6C.枚举常量 BLACK 的值为 10D.枚举常量 WHITE 的值为 15.有如下说明 int
3、a10: 1,2,3,4,5,6,7,8,9,10 ,* p=a; 则数值为 9 的表达式是( )。 (分数:2.00)A.*p+9B.*(p+8)C.*p+=9D.p+86.决定 C+语言中函数的返回值类型的是( )。(分数:2.00)A.return 语句中的表达式类型B.调用该函数时系统随机产生的类型C.调用该函数时的主调用函数类型D.在定义该函数时所指定的数据类型7.下列运算符不能重载为友元函数的是【 】(分数:2.00)A.= ( ) -B.+ - +-C. = next=q-next;B.p-next=p-next-next;C.p-next=r;D.p=q-next;21.对类成
4、员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )。(分数:2.00)A.公有类型B.私有类型C.保护类型D.友元类型22.下列描述中哪个是正确的?(分数:2.00)A.私有派生的子类无法访问父类的成员B.类 A 的私有派生子类的派生类 C 无法初始化其祖先类 A 对象的属性,因为类 A 的成员对类 C 是不可访问的C.私有派生类不能作为基类派生子类D.私有派生类的所有子孙类将无法继续继承该类的成员23.以下程序的功能是:给 r 输入数据后计算半径为 r 的圆面积 s,程序在编译时出错。 main() /* Beginning */ int r; float
5、s; scanf(“%d“, s=*r*r; printf(“s=%f/n“,s); 出错的原因是_。 (分数:2.00)A.注释语句书写位置错误B.存放圆半径的变量 r 不应该定义为整型C.输出语句中格式描述符非法D.计算圆面积的赋值语句中使用了非法变量24.有三个关系 R、S 和 T 如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交25.假定 int 类型变量占用两个字节,其有定义 int x l0= 0,2,4 ;,则数组 x 在内存中所占字节数是( )。(分数:2.00)A.3B.6C.10D.2026.有以下程序: #include main() char p=a,b,
6、c,q10=a,b,c; printf(“%d %d/n“,strlen(p),strlen(q); 以下叙述中正确的是_。(分数:2.00)A.在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B.由于 p 数组中没有字符串结束符,长度不能确定;但 q 数组中字符长度为 3C.由于 q 数组中没有字符串结束符,长度不能确定;但 p 数组中字符长度为 3D.由于 p 和 q 数组中没有字符串结束符,故长度都不能确定27.若定义 intk=7,x=12;,则能使值为 3 的表达式是( )。(分数:2.00)A.Alt+F2B.ablC.随机出儿个数D.不发生变化28
7、.在 C+语言程序中,对象之间的相互通信通过( )。(分数:2.00)A.a=1;B.+i;C.a=a+1=5D.! (+a! =b-)29.以下程序的输出结果是( )。 #includeiostreamh void main( ) inti,j,x=0; for(i=0;i 2;i+) x+; for(j=0;j 3;j+) if (j% 2)continue; x+; x+; cout “x=“ x; (分数:2.00)A.若干个二维表B.一个 DBF 文件C.一个 DBC 文件D.若干个 DBC 文件30.不能作为重载函数的调用的依据是( )。(分数:2.00)A.参数个数B.参数类型C
8、.函数类型D.函数名称31.如果表达式+x/y 中,+是作为友元函数重载的,/是作为成员函数重载的,则该表达式还可为( )。(分数:2.00)A.抽象类就是其中有函数定义但没有实现的类B.抽象类是可以被实例化的C.派生类不能成为抽象类D.抽象类的子类必须实现父类中的纯虚函数32.下面程序段的运行结果是( )。 voidmain( ) ihtt,a,b,C; a=1;b=2;C=2; while(abc) t=a;a=b;b=t;c-; couta“,“b“,“C; (分数:2.00)A.8B.9C.7D.633.下面程序输出的结果是( )。 #includeiostreamh void mai
9、n( ) int i; int a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) coutaii“ “; (分数:2.00)A.1 5 9B.7 5 3C.3 5 7D.5 9 134.有以下程序 main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;iA.7 5 3B.3 5 7C.3 6 9D.7 5 135.下面这个程序的结果是( )。 #includeiostreamh classA private: inta; public: voidseta( );intgeta( ); voidA:seta( ) a=1; intA:ge
10、ta( ) returna; classB private: inta; publiC: voidseta( );intgeta( ); voidB:seta( ) a=2; intB:geta( ) returna; classC:publicA,publicB private: intb; public: voiddisplay( ); voidC:display( ) int b:geta( ); coutb; voidmain( ) Cc; cseta( ); c.display( ); (分数:2.00)A.虚线B.点线C.不可见D.实线二、填空题(每空 2 分,共 30 分)(总题
11、数:13,分数:390.00)36.下面程序的结果为 1。 #includeiostream.h void main2 int a=1,b=2; bool c=1; if(ab)|c) cout“true“endl; else cout“false“endl; (分数:30.00)填空项 1:_37.为解决在多重继承环境中因公共基类带来的 1 问题,C+语言提供了虚基类机制。(分数:30.00)填空项 1:_38.下列程序段的输出结果是 1。 coutfixed509.123456789endl; (分数:30.00)填空项 1:_39.若将一个二元运算符重载为类的成员函数,其形参个数应该是
12、1 个。(分数:30.00)填空项 1:_40.对于下面定义的类 MyClass,请在函数 f1 中添加对象成员把 n 的值修改为 50。 class MyClass public: MyClass(int x)n=x; void SetNum (int nl) n=nl; private: int n; ; int f( ) MyClass * ptr=new MyClass(45);2 (分数:30.00)填空项 1:_41.C+语言支持的两种多态性分别是编译时的多态性和 1 的多态性。(分数:30.00)填空项 1:_42.一个关系表的行为 1 。(分数:30.00)43.在类的对象被创
13、建的时候, 1 函数会被自动调用。 (分数:30.00)填空项 1:_44.在关系数据库中,把数据表示成二维表,每一个二维表称为 1。(分数:30.00)填空项 1:_45.在关系数据库中,用来表示实体之间联系的是 1。(分数:30.00)填空项 1:_46.构造函数是和 1 同名的函数。(分数:30.00)填空项 1:_47.以下程序的结果为 1。 #include”iostreamh” templatetypename T T total(T * data) T s=0; while( * data) s+= * data +; return s; int main2 int x = 2,
14、4,6,8,0,12,14,16,18 ; cout total(x); return 0; cout end1; (分数:30.00)填空项 1:_48.在 c+语言的面向对象程序设计框架中, 1 是程序的基本组成单元。(分数:30.00)填空项 1:_国家计算机二级(C+)89 答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.以下哪个基类中的成员函数表示纯虚函数?(分数:2.00)A.virtual void vf(int)B.void vf(int)=0 C.virtual void vf(=0
15、)D.virtual void yf(int) 解析:C+中纯虚函数的定义与虚函数的关键字一样,在函数末尾要加上“=0”。2.要想使 2378965421 的输出为 237887 应用的语句是( )。(分数:2.00)A.一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可能出现二义性B.解决二义性可以用对成员名的限定法C.父类和子类中同时出现同名函数,也可能存在二义性 D.一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父类,对该父类成员进行访问时,可能出现二义性解析:多线程不是同时执行几个事件,在某个时间上,计算机还是在执行一个事件,只是多线程将程序分为几个并行的子任务,
16、由它们并发交叉执行。在宏观上看,好像是同时执行几个事件。 3.数据库设计的根本目标是要解决_。 (分数:2.00)A.数据共享问题 B.数据安全问题C.大量数据存储问题D.简化数据维护解析:由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今天,数据库与网络的结合 扩大了数据关系的应用范围。数据的共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。因此,数据库设计的根本目标是要解决数据共享问题。4.已知枚举类型声明语句为: enum COLORWHITE,YELLOW,GREEN5,RED,BLACK10;则下列说法中错误的是(分数:2
17、.00)A.枚举常量 YELLOW 的值为 1B.枚举常量 RED 的值为 6C.枚举常量 BLACK 的值为 10D.枚举常量 WHITE 的值为 1 解析:枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值;枚举元素本身由系统定义了一个表示序号的数值,从 0 开始顺序定义为 0,1,2。所以枚举函数中对象的值应从。开始,依次加 1,如果有的对象已赋值,则后面也按照前面的值依次加 1 的原则。5.有如下说明 int a10: 1,2,3,4,5,6,7,8,9,10 ,* p=a; 则数值为 9 的表达式是( )。 (分数:2.00)A.*p+9B.*(p+8) C.*p+=9D.p+
18、8解析:在 C+语言的数组元素的引用方法,如数组元素 a0,可以用表达式*(p+0),即*p 来引用,对于数组元素 a1,可以用表达式*(P+1)来引用,在这里,p+1 的值就是数组元素 a1的地址,对此地址使用“间接访问运算符”:*(p+1)就代表存储单元 a1,注意:一对圆括号不可少。同样,对于数组元素a2,则可以用表达式*(p+2)来引用,对于数组元素 a9,可以用表达式*(P+9)来引用。因此,当指针变量 p 指向 a 数组的起始地址时,若 0i B.+ - +-C. = ,赋值运算符,( )和 是不能够重载为友元函数的运算符。对双目运算符,友元函数有两个参数;对单目运算符,友元函数有
19、一个参数。8.下列描述中,抽象类的特性是( )。(分数:2.00)A.class B B.class B extends A C.class B extends A B( )System.out.println(“=“+i); D.class A 解析:局部变量在使用前必须进行初始化,而代码中的变量 k 在使用前 没有进行初始化。 9.以下能正确定义字符串的语句是_。 (分数:2.00)A.char str=/064;B.char str=“/x43“;C.char str=;D.char str=“/0“; 解析:C 语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故选项
20、 A、C 不属 于字符串, 选项 B 定义的是一个字符变量 str,却用来存放字符串,显然也不正确,所以选项 D 正确。10.不能重载的运算符是( )。(分数:2.00)A.newB.sizeofC.* D.+解析:C+语言规定* 运算符是不能被重载的。11.使用输入输出操作符 setw,可以控制(分数:2.00)A.输出精度B.输出宽度 C.对齐方式D.填充字符解析:setw 操作符可以控制输出宽度。12.以下叙述中错误的是_。 (分数:2.00)A.用户所定义的标识符允许使用关键字 B.用户所定义的标识符应尽量做到“见名知意”C.用户所定义的标识符必须以字母或下划线开头D.用户定义的标识符
21、中,大、小写字母代表不同标识解析:C 语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。大写字母和小写字母被认为是两个不同的字符,用户在定义标识符时应做到“见名知意”,且不允许使用 关键字作标识符。13.有如下程序: #includeiostreamh long fib(int n) if(n 2) return(fib(n-1)+fib(n-2) ); else return(2); void main( ) cout fib(3); 该程序的输出结果是( )。 (分数:2.00)A.2B.4 C.6D.8解析:fib(3)=fib(2)+fib(1),而
22、 fib(2)的返回值为 2,fib(1)的返回值也为 2,故输出的 fib(3)的值为4。14.在公有继承的情况下,允许派生类直接访问的基类成员包括【 】(分数:2.00)A.公有成员B.公有成员和保护成员 C.公有成员、保护成员和私有成员D.保护成员解析:派生类从基类公有继承时,派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。15.设有如下三个关系表 (分数:2.00)A.T=RSB.T=RSC.T=RSD.T=R/S解析:16.如果类 A 被说明成类 B 的友元,则( )。(分数:2.00)A.类 A 的成员即类 B 的成员B.类 B 的成员即类 A 的成员C
23、.类 A 的成员函数不得访问类 B 的成员D.类 B 不一定是类 A 的友元 解析:本题考查的是友元类的定义:类 A 为类 B 的友元类,则类 A 的所 有成员函数都是类 B 的友元函数,但反之则不一定成立。17.下面关于数组的初始化正确的是( )。(分数:2.00)A.char str :a,b,c B.char str2=a,b,cC.char str23=a,b,c,d,e,fD.char str( )=a,b,c解析:本题考查的是字符数组的初始化。选项 B)中用 3 个元素初始化大小为 2 的数组,越界了;选项 C)中应该是 2 行 3 列的数组,题中使用 3 行 2 列初始化;选项
24、D)中数组合后应用方括号。18.如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是( )。(分数:2.00)A.一元运算符B.二元运算符C.选项 A)和选项 B)都可能D.重载错误 解析:C+中用友元函数重载运算符至少有一个参数,重载一目运算符要有一个参数,重载二目运算符要有两个参数。19.在位运算中,操作数每右移一位,其结果相当于( )。(分数:2.00)A.2 B.4C.6D.0解析:此题是有关 KeyDown 事件的题目,KeyDown 是当一个键被按下时所产生的事件,而 KeyUp 是松开被按的键时产生的事件,如果要判断是否按下了某个转换键,可以用逻辑运算符 And。
25、例如:先定义了下面3 个符号常量:Const Shift=1ConstCtrl;2,Const Alt=4;然后用下面的语句判断是否按下Shift,Ctrl,Alt 键。 如果 Shift And Shift0,则按下了 Shift 键; 如果 Shift And Ctrl0,则按下了 Ctrl 键; 如果 Shift And Alt0,则按下了 Alt 键; 这里的 Shift 时KeyDown 的第二个参数;此事件过程中的 If 后的条件语句如果为真,则是按下了 Alt+F2,而本题目中是按下了 Shift+F2,所以不执行 Then 语句,即在文本框中的内容不发生变化。 20.有以下结构
26、体说明和变量定义,如图所示: (分数:2.00)A.P-next=q-next;B.p-next=p-next-next;C.p-next=r;D.p=q-next; 解析:要想将 q 所指结点从链表中删除,同时保持链表的连续,必需使 p 结点的 next 指向 r,在四个选项 中,只有选项 D 不能做到。21.对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )。(分数:2.00)A.公有类型B.私有类型C.保护类型D.友元类型 解析:所谓的访问控制只包含公有类型、私有类型和保护类型 3 种,友元可以是一个函数,也可以是一个类。22.下列描述中哪个是正确
27、的?(分数:2.00)A.私有派生的子类无法访问父类的成员B.类 A 的私有派生子类的派生类 C 无法初始化其祖先类 A 对象的属性,因为类 A 的成员对类 C 是不可访问的 C.私有派生类不能作为基类派生子类D.私有派生类的所有子孙类将无法继续继承该类的成员解析:C+语言中一个派生类能不能继承基类的所有数据成员受继承方式的限制。23.以下程序的功能是:给 r 输入数据后计算半径为 r 的圆面积 s,程序在编译时出错。 main() /* Beginning */ int r; float s; scanf(“%d“, s=*r*r; printf(“s=%f/n“,s); 出错的原因是_。
28、(分数:2.00)A.注释语句书写位置错误B.存放圆半径的变量 r 不应该定义为整型C.输出语句中格式描述符非法D.计算圆面积的赋值语句中使用了非法变量 解析:本题并未对变量“”作任何定义,所以编译时会出现非法字符的错误信息。24.有三个关系 R、S 和 T 如下: (分数:2.00)A.并B.自然连接C.笛卡尔积D.交 解析:在关系运算中,交的定义如下:设 R1 和 R2 为参加运算的两个关系,它们具有相同的度 n,且相对应的属性值取自同一个域,则 R1R2 为交运算,结果仍为度等于 n 的关系,其中,交运算的结果既属于R1 又属于 R2。25.假定 int 类型变量占用两个字节,其有定义
29、int x l0= 0,2,4 ;,则数组 x 在内存中所占字节数是( )。(分数:2.00)A.3B.6C.10D.20 解析:x 数组共有 10 个元素,在花括弧内只提供 3 个初值,这表示只给前面的 3 个成员赋值,后 7 个元素的值为 0,所以,一共有 20 个字节。26.有以下程序: #include main() char p=a,b,c,q10=a,b,c; printf(“%d %d/n“,strlen(p),strlen(q); 以下叙述中正确的是_。(分数:2.00)A.在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B.由于 p 数组中没有
30、字符串结束符,长度不能确定;但 q 数组中字符长度为 3 C.由于 q 数组中没有字符串结束符,长度不能确定;但 p 数组中字符长度为 3D.由于 p 和 q 数组中没有字符串结束符,故长度都不能确定解析:strlen 是计算以“/0”结束的字符串的长度的函数,函数的值为字符串中实际长度,不包括“/0”。 题中“q10=a,b,c”虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前 3 个存 储单元,其余存储单元系统自动加上“/0”,故数组 q 的长度为 3;由于 p 数组中没有字符串结束符,故字 符串的长度不能确定。27.若定义 intk=7,x=12;,则能使值为 3 的表达
31、式是( )。(分数:2.00)A.Alt+F2B.ablC.随机出儿个数D.不发生变化 解析: 此题是有关 KeyDown 事件的题目,KeyDown 是当一个键被按下时所产生的事件,而 KeyUp 是松开被按的键时产生的事件,如果要判断是否按下了某个转换键,可以用逻辑运算符 And。例如:先定义了下面 3 个符号常量:Const Shift=1,Const Ctrl=2,Const Alt=4;然后用下面的语句判断是否按下Shift、Ctrl、Alt 键; 如果 Shift And Shift 0,则按下了 Shift 键; 如果 Shift And Ctrl 0,则按下了 Ctrl 键;
32、如果 Shift And Alt 0,则按下了 Alt 键; 这里的 Shift时 KeyDown 的第二个参数;此事件过程中的 If 后的条件语句如果为真, 则是按下了 Alt+F2,而本题目中是按下了 Shift+F2,所以不执行 Then 语句,即文本框的内容无变化。 28.在 C+语言程序中,对象之间的相互通信通过( )。(分数:2.00)A.a=1;B.+i; C.a=a+1=5D.! (+a! =b-)解析:赋值表达式的组成是:在赋值运算符的左边是一变量,右边是一表达式。选项 B) =8+b+c=9 中,前半句 a=8+b+c 正确,但的是 a+b+c=9 左边其实是一个表达式,而
33、不是一个变量。选项 C) i=l23*4 中,连用两个双目运算符,双目运算符的用法是左右两端必须都是表达式或变量才行。选项 D) a=a+7=c+b,a+7=c+b 的左边也是个表达式,而非变量。 29.以下程序的输出结果是( )。 #includeiostreamh void main( ) inti,j,x=0; for(i=0;i 2;i+) x+; for(j=0;j 3;j+) if (j% 2)continue; x+; x+; cout “x=“ x; (分数:2.00)A.若干个二维表 B.一个 DBF 文件C.一个 DBC 文件D.若干个 DBC 文件解析:在 Access
34、数据库中表之间的关系也一般为一对多型。30.不能作为重载函数的调用的依据是( )。(分数:2.00)A.参数个数B.参数类型C.函数类型D.函数名称 解析:所谓重载函数是指同一个函数名可以对应多个函数的实现,编译 器会根据参数个数、参数类型和函数返回值类型不同而自动调用相应的函数。31.如果表达式+x/y 中,+是作为友元函数重载的,/是作为成员函数重载的,则该表达式还可为( )。(分数:2.00)A.抽象类就是其中有函数定义但没有实现的类B.抽象类是可以被实例化的C.派生类不能成为抽象类D.抽象类的子类必须实现父类中的纯虚函数 解析:java 有四种访问类型,分别为 public,prote
35、cted,default 和 private,其 中 public 变量可以被所有的外部类访问,而 pretected 变量可以被同一个包及该类的子类 访问,default 变量即没有任何修饰符的变量可以被同一个包中的类访问,而 private 变量 只能在被该类内部被访问。题目中的外部类应该理解为除该类自身的其他类。32.下面程序段的运行结果是( )。 voidmain( ) ihtt,a,b,C; a=1;b=2;C=2; while(abc) t=a;a=b;b=t;c-; couta“,“b“,“C; (分数:2.00)A.8 B.9C.7D.6解析:本题考查的是 DOLoopUnti
36、l,结构的循环语句,不管满不满足条件,都要先执行一次。经分析当I7(或 8 或 9)都满足执行三次的条件,但题目要求最小的,所以应该是 7。33.下面程序输出的结果是( )。 #includeiostreamh void main( ) int i; int a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) coutaii“ “; (分数:2.00)A.1 5 9 B.7 5 3C.3 5 7D.5 9 1解析:首先,当 i=0 时,数组中的位置是 a00=1,当然,如果用排除法的话,就不用考虑后面的循环了,因为在 4 个选项中,第 1 个数为 1 的选项只有 A)。
37、本题执行第 2 次循环时,i 的值为 1,则 cout 函数中的数组指向为 a11=5,依次循环,可求出答案。34.有以下程序 main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;iA.7 5 3B.3 5 7 C.3 6 9D.7 5 1解析:此题考核的是二维数组的应用,将初始值放在一对大括号内,按数组元素排列的顺序对各元素赋值,二维数组中行下标可以省略,但列下标必须要指定,由此题可以看出数组 t 是一个三行三列的二维数组,执行 for 循环语句 t2-ii分别为 t20,t11,t02,得出输出结果为 357。35.下面这个程序的结果是( )。 #incl
38、udeiostreamh classA private: inta; public: voidseta( );intgeta( ); voidA:seta( ) a=1; intA:geta( ) returna; classB private: inta; publiC: voidseta( );intgeta( ); voidB:seta( ) a=2; intB:geta( ) returna; classC:publicA,publicB private: intb; public: voiddisplay( ); voidC:display( ) int b:geta( ); cou
39、tb; voidmain( ) Cc; cseta( ); c.display( ); (分数:2.00)A.虚线B.点线C.不可见D.实线 解析:计算控件的控件源必须是“=”开头的计算表达式。二、填空题(每空 2 分,共 30 分)(总题数:13,分数:390.00)36.下面程序的结果为 1。 #includeiostream.h void main2 int a=1,b=2; bool c=1; if(ab)|c) cout“true“endl; else cout“false“endl; (分数:30.00)填空项 1:_ (正确答案:True)解析:本题考查的是对于逻辑运算符号的理解
40、,“|”运算符的任何一边取值为真, 则整个运算结果为真。 37.为解决在多重继承环境中因公共基类带来的 1 问题,C+语言提供了虚基类机制。(分数:30.00)填空项 1:_ (正确答案:二义性)解析:本题考查关于 C+中虚基类的作用。C+中产生虚基类的作用就是为了解决继承中的二义性问题,通过虚基类继承可以把父基类中相同的函数只编译一次。 38.下列程序段的输出结果是 1。 coutfixed509.123456789endl; (分数:30.00)填空项 1:_ (正确答案:509.123457)解析:fixed 的意义是在小数点后保留六位,所以 fixed 输出为 509.123457。3
41、9.若将一个二元运算符重载为类的成员函数,其形参个数应该是 1 个。(分数:30.00)填空项 1:_ (正确答案:1)解析:在 c+语言中,若将一个二元运算符重载为类的成员函数,则其形参个数应该是 1 个。 40.对于下面定义的类 MyClass,请在函数 f1 中添加对象成员把 n 的值修改为 50。 class MyClass public: MyClass(int x)n=x; void SetNum (int nl) n=nl; private: int n; ; int f( ) MyClass * ptr=new MyClass(45);2 (分数:30.00)填空项 1:_ (
42、正确答案:ptr-SetNum(50);)解析:本题考查的是考生使用对象指针调用成员函数的能力,指针调用成员函数应该使用符号“-”。41.C+语言支持的两种多态性分别是编译时的多态性和 1 的多态性。(分数:30.00)填空项 1:_ (正确答案:运行时)解析:本题考查的是多态的概念,多态性主要是指发出同样的消息而被不同类型的 对象接收时导致完全不同的行为,它一般分为编译时的多态性和运行时的多态性,比如 函数重载和虚函数。 42.一个关系表的行为 1 。(分数:30.00)解析:43.在类的对象被创建的时候, 1 函数会被自动调用。 (分数:30.00)填空项 1:_ (正确答案:构造函数)解
43、析:构造函数在对象创建时自动被调用。程序员不能在程序中调用构造函数。 44.在关系数据库中,把数据表示成二维表,每一个二维表称为 1。(分数:30.00)填空项 1:_ (正确答案:关系)解析:在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系。45.在关系数据库中,用来表示实体之间联系的是 1。(分数:30.00)填空项 1:_ (正确答案:关系)解析:在关系数据库中,用关系(二维表结构)表示实体及其之间联系的模型称为关系数据模型。46.构造函数是和 1 同名的函数。(分数:30.00)填空项 1:_ (正确答案:类)解析:C+语言中的构造函数就是在类中定义的和类名一样的函数。47
44、.以下程序的结果为 1。 #include”iostreamh” templatetypename T T total(T * data) T s=0; while( * data) s+= * data +; return s; int main2 int x = 2,4,6,8,0,12,14,16,18 ; cout total(x); return 0; cout end1; (分数:30.00)填空项 1:_ (正确答案:20)解析:本题考查模板函数的运用。要理解 * data 的含意。 48.在 c+语言的面向对象程序设计框架中, 1 是程序的基本组成单元。(分数:30.00)填空项 1:_ (正确答案:类)解析:C+语言面向对象程序设计的基本组成单元是 class,面向过程的程序设计的 基本组成单元是函数。