1、C+语言笔试-17 及答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。A线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性(分数:1.00)A.B.C.D.2.下列叙述中正确的是_。A栈是一种先进先出的线性表 B队列是一种后进先出的线性表C栈与队列都是非线性结构 D以上三种说法都不对(分数:1.00)A.B.C.D.3.软件测试
2、的目的是_。A评估软件可靠性 B发现并改正程序中的错误C改正程序中的错误 D发现程序中的错误(分数:1.00)A.B.C.D.4.在软件开发中,需求分析阶段产生的主要文档是_。A软件集成测试计划 B软件详细设计说明书C用户手册 D软件需求规格说明书(分数:1.00)A.B.C.D.5.软件生命周期是指_。A软件产品从提出、实现、使用维护到停止使用退役的过程B软件从需求分析、设计、实现到测试完成的过程C软件的开发过程D软件的运行维护过程(分数:1.00)A.B.C.D.6.面向对象方法中,继承是指_。A一组对象所具有的相似性质 B一个对象具有另一个对象的性质C各对象之间的共同性质 D类之间共享属
3、性和操作的机制(分数:1.00)A.B.C.D.7.层次型、网状型和关系型数据库划分原则是_。A记录长度 B文件的大小C联系的复杂程度 D数据之间的联系方式(分数:1.00)A.B.C.D.8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是_。A-对一 B一对多 C多对多 D多对一(分数:1.00)A.B.C.D.9.数据库设计中反映用户对数据要求的模式是_。A内模式 B概念模式 C外模式 D设计模式(分数:1.00)A.B.C.D.10.有三个关系 R、S 和 T 如下:RABCa12b21c31SABCa12b21TABCc31则由关系
4、R 和 S 得到关系 T 的操作是_。A自然连接 B差 C交 D并(分数:1.00)A.B.C.D.11.下列符号中能够作为 C+标识符的是_。Aconst B2a C_shape D-count(分数:1.00)A.B.C.D.12.已知枚举类型声明语句为:enum COLOR WHITE,YELLOW,GREEN=5,RED,BLACK=10;则下列说法中错误的是_。A枚举常量 YELLOW 的值为 1 B枚举常量 RED 的值为 6C枚举常量 BLACK 的值为 10 D枚举常量 WHITE 的值为 1(分数:1.00)A.B.C.D.13.执行下列语句段后,输出字符“*”的个数是_。f
5、or (int i=50; i1;i-=2)cout*;A24 B25 C26 D50(分数:1.00)A.B.C.D.14.有如下定义:int a5=1,3,5,7,9,*p=a;下列表达式中不能得到数值 5 的是_。Aa2 Ba3 C*(p+2) D*p+4(分数:1.00)A.B.C.D.15.下列语句中错误的是_。Aconst int a; Bconst int a=10;Cconst int*point=0; Dconst int*point=new int(10);(分数:1.00)A.B.C.D.16.已知函数 FA 调用函数 FB,若要把这两个函数定义在同一个文件中,则_。AF
6、A 必须定义在 FB 之前BFB 必须定义在 FA 之前C若 FA 定义在 FB 之后,则 FA 的原型必须出现在 FB 的定义之前D若 FB 定义在 FA 之后,则 FB 的原型必须出现在 FA 的定义之前(分数:1.00)A.B.C.D.17.下列关于运算符函数的描述中,错误的是_。A运算符函数的名称总是以 operator 为前缀B运算符函数的参数可以是对象C运算符函数只能定义为类的成员函数D在表达式中使用重载的运算符相当于调用运算符重载函数(分数:1.00)A.B.C.D.18.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。A内联函数 B重载函数 C递归函数 D函数模板(
7、分数:1.00)A.B.C.D.19.若要对 Data 类中重载的加法运算符成员函数进行声明,下列选项中正确的是_。AData+(Data); BData operator+(Data); CData+operator(Data); Doperator+(Data,Data);(分数:1.00)A.B.C.D.20.已知函数 f 的原型是 void f(int*a,longlong v2;下列调用语句中正确的是_。Af(v1, Bf(v1,v2); Cf( Df((分数:1.00)A.B.C.D.21.已知 Value 是一个类,value 是 Value 的一个对象。下列以非成员函数形式重载
8、的运算符函数原型中,正确的是_。AValue operator+(Value v,int i); BValue operator+(Value V=value,int i);CValue operator+(Value v,int i=0); DValue operator+(Value V=value,int i=0);(分数:1.00)A.B.C.D.22.下列关于运算符重载的描述中,正确的是_。A运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B一元运算符只能作为成员函数重载C二元运算符重载为非成员函数时,参数表中有一个参数DC+中可以重载所有的运算符(分数:1.00)A.B
9、.C.D.23.下列有关类成员的叙述中,正确的是_。A友元函数是类的成员函数 B类成员的默认访问权限是私有的C类成员函数必须声明为公有的 D类的静态数据成员不能是常成员(分数:1.00)A.B.C.D.24.有如下类定义:class Pointprivate:static int how_many;_how_many=0;要初始化 Point 类的静态成员 how_many,下画线处应填入的内容是_。Aint Bstatic int Cint Point: Dstatic int Point:(分数:1.00)A.B.C.D.25.有如下头文件:int f1();static int f2()
10、;class MApublic:int B();static int f4();在所描述的函数中,具有隐含的 this 指针的是_。Af1 Bf2 Cf3 Df4(分数:1.00)A.B.C.D.26.下列有关类继承的叙述中,错误的是_。A继承可以实现软件复用 B虚基类可以解决由多继承产生的二义性问题C派生类构造函数要负责调用基类的构造函数 D派生类没有继承基类的私有成员(分数:1.00)A.B.C.D.27.在下列关键字中,不能用来表示继承方式的是_。Aprivate Bstatic Cpublic Dprotected(分数:1.00)A.B.C.D.28.有如下两个类定义:class X
11、Xprivate:double x1;protected:double x2;public:double x3;class YY:protected XXprivate:double y1;protected:double y2;public:double y3;在类 YY 中保护成员变量的个数是_。A1 B2 C3 D4(分数:1.00)A.B.C.D.29.有如下类定义:class MyClassint value;public:MyClass(int n):value (n)int getValue()constreturn value;则类 MyClass 的构造函数的个数是_。A1
12、个 B2 个 C3 个 D4 个(分数:1.00)A.B.C.D.30.有如下类和对象的定义:class Constantspublic:static double getPI() return 3.1416;Constants constants;下列各组语句中,能输出 3.1416 的是_。Acoutconstants-getPI();和 coutConstants:getPI();Bcoutconstants.getPI();和 coutConstants.getPI();Ccoutconstants-getPI();和 coutConstants-getPI();Dcoutconsta
13、nts.getPI();和 coutConstants:getPI();(分数:1.00)A.B.C.D.31.有如下程序:#includeiostreamusing namespace std;class VACpublic:int f()constreturn 3;int f()return 5;int main()VAC v1;const VAC v2;coutv1.f()v2.f();return 0;执行这个程序的输出结果是_。A53 B35 C55 D33(分数:1.00)A.B.C.D.32.有如下程序:#includeiostreamusing namespace std;cl
14、ass MyClasspublic:MyClass(int i=0)cout1;MyClass(const MyClassMyClass retum*this;MyClass()cout4;int main()MyClass obj1(1),obj2(2),obj3(obj1);return0;执行这个程序的输出结果是_。A112444 B11114444 C121444 D11314444(分数:1.00)A.B.C.D.33.有如下类声明:class Baseprotected:mt amount;public:Base(int n=0):amount(n)int getAmount( )
15、constreturn amount;class Derived:public Baseprotected:int value;public:Derived(int m,int n):value(m),Base(n)int getData() constreturn value+amount;已知 x 是一个 Derived 对象,则下列表达式中正确的是_。Ax.value+x.getAmount() Bx.getData()-x.getAmount()Cx.getData()-x.amount Dx.value+x.amount(分数:1.00)A.B.C.D.34.有如下程序:#inclu
16、deiostreamusing namespace std;class AAint k;protected:int n;void setK(int k)this-k=k;public:void setN(int n)this-n=n;class BB:public AA/*类体略*/;int main()BB x;x.n=1;/1x.setN(2);/2x.k=3;/3x.setK(4);/4return 0;在标注号码的四条语句中正确的是_。A1 B2 C3 D4(分数:1.00)A.B.C.D.35.有如下程序:#includeiostreamusing namespace std;cla
17、ss Baseint x;public:Base(int n=0):x(n)coutn;int getX()constreturn x;class Derived:public Basemt y;public:Derived(int m,int n):y(m),Base(n)coutm;Derived(int m):y(m)coutm;int main()Derived d1(3),d2(5,7);return 0;执行这个程序的输出结果是_。A375 B357 C0375 D0357(分数:1.00)A.B.C.D.36.有如下程序:#includeiostreamusing namespa
18、ce std;class CApublic:virtual int f()return 1;class GB:public GApublic:virtual int f()return 2;void show(GA g)coutg.f();void display(GA int main()GA a;show(a);display(a);CB b;show(b);display(b);return 0;执行这个程序的输出结果是_。A1111 B1211 C1112 D1212(分数:1.00)A.B.C.D.37.下列有关模板的叙述中,正确的是_。A函数模板不能含有常规形参 B函数模板的一个实
19、例就是一个函数定义C类模板的成员函数不能是模板函数 D用类模板定义对象时,绝对不能省略模板实参(分数:1.00)A.B.C.D.38.下面是一个模板声明的开始部分:templatetypename Tdouble由此可知_。A这可能是一个函数模板的声明 B这可能是一个类模板的声明C这既可能是一个函数模板的声明,也可能是一个类模板的声明D这肯定是一个错误的模板声明(分数:1.00)A.B.C.D.39.C+系统预定义了 4 个用于标准数据流的对象,下列选项中不属于此类对象的是_。Acout Bcin Ccerr Dcset(分数:1.00)A.B.C.D.40.下列语句都是程序运行时的第 1 条
20、输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是_。Acoutintemal12345; Bcoutleft12345;Ccoutright12345; Dcoutsetw(6)12345;(分数:1.00)A.B.C.D.二、操作题(总题数:3,分数:60.00)41.请使用 VC6 或使用答题菜单打开考生文件夹 proj1 下的工程 proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“/ERROR *found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:NUM=0Value=1注意:只修改注释“/ERROR *found*”的下一行语
21、句,不要改动程序中的其他内容。/proj1.cpp#include iostreamusing namespace std;class MyClass int_i;friend void Increment (MyClasspublic:const int NUM;MyClass(int i=0) NUM=0;_i=i;int GetValue () const return_i;/ERROR *found*void Increment () f._i+;int main ()MyClass obj;MyClass:Increment (obj);cout“NUM=“obj.NUMendl“V
22、alue=“obj.GetValue()endl;return 0;(分数:20.00)_42.请使用 VC6 或使用答题菜单打开考生文件夹 proj2 下的工程 proj2,此工程包含一个源程序文件proj2.cpp。其中定义了 Score 类。Score 是一个用于管理考试成绩的类。其中,数据成员_s 指向存储成绩的数组,_n 表示成绩的个数;成员函数 Sort 使用冒泡排序法将全部成绩按升序进行排列。请在程序中的横线处填写适当的代码,然后删除横线,以实现 Score 类的成员函数 Sort。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“/*found*”。/
23、proj2.cpp#include iostream#include cstdlib#include ctimeusing namespace std;class Score public:Score(double * s, int n):_s(s),_n(n)double GetScore (int i) const return_si;void Sort ();private:double*_s;int_n;void Score:Sort()for(int i=0;in-1;_)/*found*for(int j=_;ji;j-)if(_sj_sj-1)/交换_sj和_sj-1double
24、 t=_sj;/*found*_;/*found*_;int main ()const int NUM=10;double sNUM;srand(time (0);for(int i=0;iNUM;i+)si=double(rand ()/RAND MAX*100;Score ss(s, NUM);ss.Sort();for(int j=0;jNUM;j+)coutss.GetScore(j)endl;return 0;(分数:20.00)_43.请使用 VC6 或使用答题菜单打开考生文件夹 proj3 下的工程 prog3,其中声明了 VaIArray 类,该类在内部维护一个动态分配的整型数
25、组。ValArray 类的复制构造函数应实现对象的深层复制。请编写ValArray 类的复制构造函数。在 main 函数中给出了一组测试数据,此种情况下程序的输出应该是:VaIArray v1=1,2,3,4,5VaIArray v2=2,2,2,2,2要求:补充编制的内容写在“/*333*”与“/*666*”之间。不要修改程序的其他部分。注意:相关文件包括:main.cpp、ValArray.h。程序最后调用 writeToFile 函数,使用另一组不同的测试数据,将不同的运行结果输出到文件 out.dat 中。输出函数 writeToFile 已经编译为 obj 文件。/ValArray.
26、h#includeiostreamusing namespace std;class ValArray int*v;int size;public:ValArray(const int*p,int n)size(n)v=new intsize;for (int i=0;isize;i+)vi=pi;ValArray(const ValArrayValArray()delete v;void setElement(int i,int val)vi =val;void print (ostreamisize-1;i+)outbi“,“;outvsize-1;void writeToFile (co
27、nst char*);/main.cpp#include “ValArray.h“ValArray:ValArray (const ValArrayValArray v1(a,5);ValArray v2(v1);for (int i=0;i5;i+)v2.setElement(i,2);cout“ValArray v1=“;v1.print(cout);coutendl;cout“ValArray v2=“;v2.print(cout);coutendl;writeToFile(“ “);return 0;(分数:20.00)_C+语言笔试-17 答案解析(总分:100.00,做题时间:90
28、 分钟)一、单项选择题(总题数:40,分数:40.00)1.下列叙述中正确的是_。A线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性(分数:1.00)A.B. C.D.解析:解析 线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。2.下列叙述中正确的是_。A栈是一种先进先出的线性表 B队列是一种后进先出的线性表C栈与队列都是非线性结构 D以上三种说法都不
29、对(分数:1.00)A.B.C.D. 解析:解析 栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。3.软件测试的目的是_。A评估软件可靠性 B发现并改正程序中的错误C改正程序中的错误 D发现程序中的错误(分数:1.00)A.B.C.D. 解析:解析 软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。4.在软件开发中,需求分析阶段产生的主要文档是_。A软件集成测试计划 B软件详细设计说明书C用户手册 D软件需求规格说明书(分数:1.00)A.B.C.D. 解析:解析 需求分析阶段的工作可以概括为:
30、需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择 D。5.软件生命周期是指_。A软件产品从提出、实现、使用维护到停止使用退役的过程B软件从需求分析、设计、实现到测试完成的过程C软件的开发过程D软件的运行维护过程(分数:1.00)A. B.C.D.解析:解析 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。6.面向对象方法中,继承是指_。A一组对象所具有的相似性质 B一个对象具有另一个对象的性质C各对象之间的共同性质 D类之间共享属性和操作的机制(分数:1.00
31、)A.B.C.D. 解析:解析 继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。7.层次型、网状型和关系型数据库划分原则是_。A记录长度 B文件的大小C联系的复杂程度 D数据之间的联系方式(分数:1.00)A.B.C.D. 解析:解析 层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人
32、员与实体计算机之间的联系是_。A-对一 B一对多 C多对多 D多对一(分数:1.00)A.B.C. D.解析:解析 因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。9.数据库设计中反映用户对数据要求的模式是_。A内模式 B概念模式 C外模式 D设计模式(分数:1.00)A.B.C. D.解析:解析 数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择 C。内模式又称物理模式,它给出了数据库物理存储结
33、构与物理存取方法。10.有三个关系 R、S 和 T 如下:RABCa12b21c31SABCa12b21TABCc31则由关系 R 和 S 得到关系 T 的操作是_。A自然连接 B差 C交 D并(分数:1.00)A.B. C.D.解析:解析 关系 T 中的元组是 R 关系中有而 S 关系中没有的元组的集合,所以进行的是差的运算。11.下列符号中能够作为 C+标识符的是_。Aconst B2a C_shape D-count(分数:1.00)A.B.C. D.解析:解析 本题考查 C+标识符的命名规则,其规则有如下几点:所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;所有标识符
34、不能使用 C+已有的关键字;大、小写字母表示不同意义,即代表不同的标识符。选项 A 是关键字,选项 B 不能以数字开头,选项 D 包含了字符“-”,且不能以此字符开头。故答案为 C。12.已知枚举类型声明语句为:enum COLOR WHITE,YELLOW,GREEN=5,RED,BLACK=10;则下列说法中错误的是_。A枚举常量 YELLOW 的值为 1 B枚举常量 RED 的值为 6C枚举常量 BLACK 的值为 10 D枚举常量 WHITE 的值为 1(分数:1.00)A.B.C.D. 解析:解析 C+语言规定枚举常量的默认值依次等于 0,1,n-1。也可以给枚举常量赋初值,方法是:
35、在枚举常量的后面跟上“=整型常量”,在给枚举常量赋初值时,如果给其中任何一个枚举常量赋初值,则其后的枚举常量将按自然数的规则依次赋初值。所以本题答案为 D。13.执行下列语句段后,输出字符“*”的个数是_。for (int i=50; i1;i-=2)cout*;A24 B25 C26 D50(分数:1.00)A.B. C.D.解析:解析 本题考查 for 循环语句,题目中每执行完循环体后,i 都会减 2,那么只有 50 到 2 之间的偶数才能输出“*”,所以总共输出 25 次。14.有如下定义:int a5=1,3,5,7,9,*p=a;下列表达式中不能得到数值 5 的是_。Aa2 Ba3
36、C*(p+2) D*p+4(分数:1.00)A.B. C.D.解析:解析 本题考查指向数组的指针,本题中指针变量 p 指向数组 a,直接使用数组下标即可取值,数组下标是从 0 开始标号的,所以 a2能取到 5,而 a3取不到 5,C 选项中使用指针后移方法能够取到5,D 选项中*p 为 1,所以*p+4 为 5。15.下列语句中错误的是_。Aconst int a; Bconst int a=10;Cconst int*point=0; Dconst int*point=new int(10);(分数:1.00)A. B.C.D.解析:解析 const 是一个 C+语言的关键字,它限定一个变量
37、不允许被改变。使用 const 在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化。A 选项没有初始化,B、C、D选项都正确。16.已知函数 FA 调用函数 FB,若要把这两个函数定义在同一个文件中,则_。AFA 必须定义在 FB 之前BFB 必须定义在 FA 之前C若 FA 定义在 FB 之后,则 FA 的原型必须出现在 FB 的定义之前D若 FB 定义在 FA 之后,则 FB 的原型必须出现在 FA 的定义之前(分数:1.00)A.B.C.D. 解析:解析 如果使用用户自己定义的函数,而该函数与调用它的函数(即主调用函数)在同一程序单元中,且位置在主调用函数之后,
38、则必须在调用此函数之前对被调用的函数作声明。17.下列关于运算符函数的描述中,错误的是_。A运算符函数的名称总是以 operator 为前缀B运算符函数的参数可以是对象C运算符函数只能定义为类的成员函数D在表达式中使用重载的运算符相当于调用运算符重载函数(分数:1.00)A.B.C. D.解析:解析 运算符函数可以定义为类的友元函数。所以 C 选项错误。18.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。A内联函数 B重载函数 C递归函数 D函数模板(分数:1.00)A. B.C.D.解析:解析 一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内
39、联函数在调用时,是将调用表达式用内联函数体来替换,一般只将规模很小而使用频繁的函数声明为内联函数,可以避免函数调用时间开销,从而提高运行速度。19.若要对 Data 类中重载的加法运算符成员函数进行声明,下列选项中正确的是_。AData+(Data); BData operator+(Data); CData+operator(Data); Doperator+(Data,Data);(分数:1.00)A.B. C.D.解析:解析 根据重载加法运算符的格式,只有 B 选项正确。20.已知函数 f 的原型是 void f(int*a,longlong v2;下列调用语句中正确的是_。Af(v1,
40、 Bf(v1,v2); Cf( Df((分数:1.00)A.B.C.D. 解析:解析 函数参数的 3 种传递方式:将变量名作为形参和实参,即传值方式;传递变量指针;引用形参。本题中函数 f 的第一个形参为指针,那么调用 f 函数时,第一个参数必须是地址,所以必须是 BValue operator+(Value V=value,int i);CValue operator+(Value v,int i=0); DValue operator+(Value V=value,int i=0);(分数:1.00)A. B.C.D.解析:解析 本题考查运算符重载,其中重载运算符的函数不能有默认的参数,所
41、以本题答案为 A。22.下列关于运算符重载的描述中,正确的是_。A运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B一元运算符只能作为成员函数重载C二元运算符重载为非成员函数时,参数表中有一个参数DC+中可以重载所有的运算符(分数:1.00)A. B.C.D.解析:解析 运算符重载为成员函数时,会省略一个参数,如果无参数,表明是一元运算符。一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。二元运算符如果作为非成员函数,则参数表中必须有两个参数。C+有 5 个运算符不能重载,它们是:.(成员访问运算符)、.*(成员指针访问运算符)、:(域运算符)、sizeof(长度运算符)
42、和?:(条件运算符)。故本题答案为 A。23.下列有关类成员的叙述中,正确的是_。A友元函数是类的成员函数 B类成员的默认访问权限是私有的C类成员函数必须声明为公有的 D类的静态数据成员不能是常成员(分数:1.00)A.B. C.D.解析:解析 友元函数是指某些虽然不是类成员却能访问类的所有成员的函数,故友元函数不是类的成员函数。类成员的默认访问权限是私有的,类的成员函数可以是 3 种权限中的一种,静态数据成员可以为常成员。故本题答案为 B。24.有如下类定义:class Pointprivate:static int how_many;_how_many=0;要初始化 Point 类的静态成
43、员 how_many,下画线处应填入的内容是_。Aint Bstatic int Cint Point: Dstatic int Point:(分数:1.00)A.B.C. D.解析:解析 本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外进行初始化,其一般形式为:数据类型类名:静态数据成员名=初值。所以本题答案为 C。25.有如下头文件:int f1();static int f2();class MApublic:int B();static int f4();在所描述的函数中,具有隐含的 this 指针的是_。Af1 Bf2 Cf3 Df4(分数:1.00)A.B.C. D.解
44、析:解析 只有类的非静态成员函数才隐含 this 指针,其作用域是类内部,当类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,而不必一定写上this。所以本题答案为 C。26.下列有关类继承的叙述中,错误的是_。A继承可以实现软件复用 B虚基类可以解决由多继承产生的二义性问题C派生类构造函数要负责调用基类的构造函数 D派生类没有继承基类的私有成员(分数:1.00)A.B.C.D. 解析:解析 3 种继承方式中,派生类继承了基类的私有成员,但不能被直接访问,可以通过派生类的友元函数去访问基类的私有成员。27.在下列关键字中,不能用来表示继承方式的是
45、_。Aprivate Bstatic Cpublic Dprotected(分数:1.00)A.B. C.D.解析:解析 3 种继承方式:公用继承、私有继承和保护继承分别使用 public、private 和 protected 3 个关键字来定义。28.有如下两个类定义:class XXprivate:double x1;protected:double x2;public:double x3;class YY:protected XXprivate:double y1;protected:double y2;public:double y3;在类 YY 中保护成员变量的个数是_。A1 B2 C3 D4(分数:1.00)A.B.C. D.解析:解析 本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,所以基类的成员 x2、x3 变成了保护成员,派生类中的 y2 也是保护成员,所以共有 3 个保护成员。本题答案为