1、二级 C+-177 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:100.00)1.下列关于栈叙述正确的是_。(分数:2.50)A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.以上三种说法都不对2.下列叙述中正确的是_。(分数:2.50)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构C.循环链表是非线性结构D.双向链表是非线性结构3.某二叉树共有 7 个结点,其中叶子结点只有 1 个,则该二叉树的深度为(假设根结点在第 1 层)_。(分数:2.50)A.3B.4C.6D.74.
2、在软件开发中,需求分析阶段产生的主要文档是_。(分数:2.50)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书5.结构化程序所要求的基本结构不包括_。(分数:2.50)A.顺序结构B.GOTO 跳转C.选择(分支)结构D.重复(循环)结构6.下面描述中错误的是_。(分数:2.50)A.系统总体结构图支持软件系统的详细设计B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD 图是软件详细设计的表示工具7.负责数据库中查询操作的数据库语言是_。(分数:2.50)A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语
3、言8.一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是_。(分数:2.50)A.1:1 联系B.1:m 联系C.m:1 联系D.m:n 联系9.有三个关系 R、S 和 T 如下: (分数:2.50)A.自然连接B交C除D并10.定义无符号整数类为 UInt,下面可以作为类 UInt 实例化值的是_。(分数:2.50)A.-369B.369C.0.369D.整数集合1, 2, 3, 4, 511.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:2.50)A.内联函数B.重载函数C.递归函数D.函数模板12.若 AA 为一个类,a 为该类的非静态数据
4、成员,在该类的一个成员函数定义中访问 a 时,其书写格式为_。(分数:2.50)AaB.AA.aC.a()D.AA:a()13.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是_。(分数:2.50)A.任何B.公有或保护C.保护或私有D.私有14.若要对 Data 类中重载的加法运算符成员函数进行声明,下列选项中正确的是_。(分数:2.50)A.Data+(Data);B.Data operator+(Data);C.Data+operator(Data);D.opcrator+(Data, Data);15.下列关于函数模板的描述中,正确
5、的是_。(分数:2.50)A.函数模板是一个实例函数B.使用函数模板定义的函数没有返回类型C.函数模板的类型参数与函数的参数相同D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数16.函数定义为 Fun(int B.fun(20+n);C.fun(n);D.funD( class T220.下列关于常数据成员的说法,错误的是_。(分数:2.50)A.常数据成员必须进行初始化,并且不能更新B.使用 const 说明的数据成员称为常数据成员C.可以在类体外面定义常数据成员D.常数据成员的初始化只能通过构造函数的成员初始化列表进行21.C+系统预定义了 4 个用于标准数据流的对象,下列选项
6、中不属于此类对象的是_。(分数:2.50)A.coutB.cinC.cerrD.cset22.Windows 环境下,由 C+源程序文件编译而成的目标文件的扩展名是_。(分数:2.50)A.cppB.exeC.objD.lik23.字符串“a+b=12/n/t”的长度为_。(分数:2.50)A.12B.10C.8D.624.有如下程序: #include using namespace std; int main() int f, f1=0, f2=1; for(int i=3; i=6; i+) f=f1+f2; f1=f2; f2=f; coutf return 0; /f 运行时的输出结
7、果是_。(分数:2.50)A.2B.3C.5D.825.有如下程序: #include using namespace std; int main() int a6=23, 15, 64, 33, 40, 58; int s1, s2; s1=s2=a0; for(int* p=a+1; p if(s1*p) s1=*p; if(s2*p) s2=*p; couts1+s2 return 0; /s1+s2 运行时的输出结果是_。(分数:2.50)A.23B.58C.64D.7926.有如下程序: #include using namespace std; void f1(int x=y; y
8、=z; void f2(int x; int y) int z=x; x=y; y=z; int main() int x=10, y=26; f1(x, y); f2(x, y); couty return 0; /y 运行时的输出结果是_。(分数:2.50)A.10B.16C.26D.3627.有如下程序: #include using namespace std; class XA int a; public: static int b; XA(int aa):a(aa)b+; XA() int get()return a; ; int XA:b=0; int main() XA d1(
9、2), d2(3); cout return 0; 运行时的输出结果是_。(分数:2.50)A.5B.6C.7D.828.有如下程序: #include using namespace std; class Point int x, y; public: Point(int x1=0, int y1=0):x(x1), y(y1) int get()return x+y; ; class Circle Point center; int radius; public: Circle(int cx, int cy, int r):center(cx, cy), raaius(r) int get
10、()return center.get()+radius; ; int main() Circle c(3, 4, 5); coutc.get() return 0; /c.get() 运行时的输出结果是_。(分数:2.50)A.5B.7C.9D.1229.若要对类 BigNumber 中重载的类型转换运算符 long 进行声明,下列选项中正确的是_。(分数:2.50)A.operator long() const;B.operator long(BigNumber);C.long operator long() const;D.long operator long(BigNumber);30
11、.有如下函数模板定义: template T1 FUN(T2 n)return n*5.0; 若要求以 int 型数据 9 作为函数实参调用该模板,并返回一个 double 型数据,则该调用应表示为_。(分数:2.50)A.FUN(9)B.FUN9C.FUNdouble(9)D.FUN9(double)31.下列语句都是程序运行时的第 1 条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是_。(分数:2.50)A.coutinternal32345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345;32.下列关于析构函数的描述中
12、,错误的是_。(分数:2.50)A.析构函数可以重载B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数33.下列关于构造函数的描述中,错误的是_。(分数:2.50)A.构造函数名与类名相同B.构造函数可以有返回值C.构造函数可以重载D.每个类都有构造函数34.若 PAT 是一个类,则程序运行时,语句“PAT(*ad)3;”调用 PAT 的构造函数的次数是_。(分数:2.50)A.0B.1C.2D.335.下列描述中,错误的是_。(分数:2.50)A.公有继承时基类中的公有成员在派生类中仍是公有成员B.公有继承时基类中的保护成员在派生类中仍是保护成员C.保护继承时
13、基类中的公有成员在派生类中仍是公有成员D.保护继承时基类中的保护成员在派生类中仍是保护成员36.生成派生类对象时,派生类构造函数调用基类构造函数的条件是_。(分数:2.50)A.无须任何条件B.基类中鼎式定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数37.下列关于派生类和基类的描述中,正确的是_。(分数:2.50)A.派生类成员函数只能访问基类的公有成员B.派生类成员函数只能访问基类的公有和保护成员C.派生类成员函数可以访问基类的所有成员D.派生类对基类的默认继承方式是公有继承38.有如下类模板定义: template class BigNumber lo
14、ng n; public: BigNumber(T i):n(i) BigNumber operator+(BigNumber b) return BigNumber(n+b.n); ; 已知 b1、b2 是 BigNumber 的两个对象,则下列表达式中错误的是_。(分数:2.50)A.b1+b2B.b1+3C.3+b1D.3+339.下列关于文件流的描述中,正确的是_。(分数:2.50)A.文件流只能完成针对磁盘文件的输入/输出B.建立一个文件流对象时,必须同时打开一个文件C.若输入流要打开的文件不存在,将建立一个新文件D.若输出流要打开的文件不存在,将建立一个新文件40.有如下程序: #
15、include using namespace std; class Pair int m, n; public: Pair(int j, int k):m(j), n(k) int get()return m; int get() constreturn m+n; ; int main() Pair a(3, 5); const Pair b(3, 5); couta.get()b.get(); return 0; 运行时的输出结果是_。(分数:2.50)A.33B.38C.83D.88二级 C+-177 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:40,分数:1
16、00.00)1.下列关于栈叙述正确的是_。(分数:2.50)A.栈顶元素最先能被删除 B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.以上三种说法都不对解析:解析 本题考查的知识点是栈。栈的特点是先进后出,后进先出,所以先入栈的最后出栈,因此,栈顶元素最先能被删除。2.下列叙述中正确的是_。(分数:2.50)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构 C.循环链表是非线性结构D.双向链表是非线性结构解析:解析 本题考查的知识点是数据结构。有一个以上根结点的数据结构是非线性结构,而只有一个根结点的数据结构不止一个叶子,因而不一定是线性结构
17、。3.某二叉树共有 7 个结点,其中叶子结点只有 1 个,则该二叉树的深度为(假设根结点在第 1 层)_。(分数:2.50)A.3B.4C.6D.7 解析:解析 本题考查的知识点是二叉利结构。二叉树的深度即组成陔树各结点的最大层次;结点的层次由根开始定义,根为第一层,根的叶子为第二层,树中结点的最大层次称为树的深度。因为只有一个叶子因而其深度为 7。4.在软件开发中,需求分析阶段产生的主要文档是_。(分数:2.50)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析 本题考查的知识点是需求分析。需求分析就是明确在软件开发中做什么和不做什么,即软件需求规格说
18、明书。5.结构化程序所要求的基本结构不包括_。(分数:2.50)A.顺序结构B.GOTO 跳转 C.选择(分支)结构D.重复(循环)结构解析:解析 本题考查的知识点是程序结构。按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的顺序结构、选择结构和循环结构三种基本程序结构的组合来实现。6.下面描述中错误的是_。(分数:2.50)A.系统总体结构图支持软件系统的详细设计 B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD 图是软件详细设计的表示工具解析:解析 本题考查的知识点是系统结构图。系统结构图反映的是系统中模块的调用关系和层次关系
19、。它表示了一个系统(或功能模块)的层次分解关系、模块之间的调用关系,以及模块之间数据流和控制流信息的传递炎系。7.负责数据库中查询操作的数据库语言是_。(分数:2.50)A.数据定义语言B.数据管理语言C.数据操纵语言 D.数据控制语言解析:解析 本题考查的知识点是数据语言。数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,如查询与增、删、改等;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等。8.一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是_。(分数:2.50)A.1:1 联系B.1:m 联系C.m:1
20、 联系D.m:n 联系 解析:解析 本题考查的知识点是实体联系。教师为实体,实体有多个,对应的课程也有多个,因而选D,为 m:n 联系。9.有三个关系 R、S 和 T 如下: (分数:2.50)A.自然连接B交C除 D并解析:解析 本题考查的知识点是交并运算。R 和 S 的交为 R,并也为 R,因而是除。R 与 S 的除运算得到一个新的关系 P(X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上的分量值 x 的象集Yx 包含 S 在 Y 上的投影的集合。10.定义无符号整数类为 UInt,下面可以作为类 UInt 实例化值的是_。(分数:2.50)A.-369B.36
21、9 C.0.369D.整数集合1, 2, 3, 4, 5解析:解析 本题考查的知识点是无符号整数。这种类型不存放负值,且如果一个表达式中同时出现普通的整数和无符号类型的整数,普通的整数就会被转换成无符号类型。11.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:2.50)A.内联函数 B.重载函数C.递归函数D.函数模板解析:解析 本题考查的知识点是内联函数,内联函数调用的说明“嵌入”,对内联优点的说明可以“大大减少调用函数的时间开销”。12.若 AA 为一个类,a 为该类的非静态数据成员,在该类的一个成员函数定义中访问 a 时,其书写格式为_。(分数:2.50)AaB.A
22、A.aC.a()D.AA:a() 解析:解析 本题考查的知识点是成员函数定义。成员函数定义的结构与普通函数不同之处是在返回类型和函数名之间加了一个类名和双冒号“:”,称为作用域运算符,用来标识成员函数或数据成员是属于哪个类。13.当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是_。(分数:2.50)A.任何 B.公有或保护C.保护或私有D.私有解析:解析 本题考查的知识点是派生类对基类中各成员的访问能力。派生类对基类中各成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性。14.若要对 Data 类中重载的加法运算
23、符成员函数进行声明,下列选项中正确的是_。(分数:2.50)A.Data+(Data); B.Data operator+(Data);C.Data+operator(Data);D.opcrator+(Data, Data);解析:解析 本题考查的知识点是重载运算符。加法运算符“+”是一个二元运算符,当作为成员函数重载时参数表中只有 1 个参数,对应于第二个操作数,而第一个操作数是对象本身,以 this 指针的形式隐藏在参数表中。15.下列关于函数模板的描述中,正确的是_。(分数:2.50)A.函数模板是一个实例函数B.使用函数模板定义的函数没有返回类型C.函数模板的类型参数与函数的参数相同
24、D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数 解析:解析 本题考查的知识点是函数模板。它是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。 声明一个函数模板的格式是: template模板形参表声明函数声明16.函数定义为 Fun(int B.fun(20+n);C.fun(n); D.funD( class T2解析:解析 模板的声明格式如下:template模板形参表。模板形参表中每个形参用 typename 或class 开头,若模板形参表由多个模板形参组成,则要用逗号隔开
25、。20.下列关于常数据成员的说法,错误的是_。(分数:2.50)A.常数据成员必须进行初始化,并且不能更新B.使用 const 说明的数据成员称为常数据成员C.可以在类体外面定义常数据成员 D.常数据成员的初始化只能通过构造函数的成员初始化列表进行解析:解析 类中定义的数据成员,除了可以是一般变量外,还可以是 const 变量,称为常数据成员。构造函数可以对对象的数据成员进行初始化,但如果数据成员为常量成员,则不能在构造函数中直接用赋值语句进行赋值,需要利用构造函数的初始化列表进行初始化。21.C+系统预定义了 4 个用于标准数据流的对象,下列选项中不属于此类对象的是_。(分数:2.50)A.
26、cout B.cinC.cerrD.cset解析:解析 本题考查的知识点是 C+系统预定义标准数据流。C+流有 4 个预定义的流对象,它们的名称及与之联系的 I/O 设备如下:cin:标准输入;cout:标准输出;cerr:标准出错信息输出;clog:带缓冲的标准出错信息输出。22.Windows 环境下,由 C+源程序文件编译而成的目标文件的扩展名是_。(分数:2.50)A.cppB.exeC.obj D.lik解析:解析 本题考查的知识点是编译。编译是由源程序文件转换到目标文件的过程。在 Visual C+6.0 集成开发环境中,可以使用编译(Compile)命令将一个.cpp 源文件转换
27、成一个.obj 的目标文件。23.字符串“a+b=12/n/t”的长度为_。(分数:2.50)A.12B.10C.8 D.6解析:解析 本题考查的知识点是字符串的长度,a+b=12/n/t 中/n 表示换行,/t 代表制表符,总长度为 8。24.有如下程序: #include using namespace std; int main() int f, f1=0, f2=1; for(int i=3; i=6; i+) f=f1+f2; f1=f2; f2=f; coutf return 0; /f 运行时的输出结果是_。(分数:2.50)A.2 B.3C.5D.8解析:解析 本题考查的知识点
28、是循环结构。for 语句是 C+中最常用且功能最强的循环语句,其语法格式如下: for(表达式 1; 表达式 2; 表达式 3) 语句 其中,for 为关键字;表达式 1是 for 循环的初始化部分,它一般用来设置循环控制变量的初始值;表达式 2是 for 循环的条件部分,它是用来判定循环是否继续进行的条什;表达式 3是 for 循环的增量部分,它一般用于修改循环控制变量的值;语句称为 for 循环的循环体。25.有如下程序: #include using namespace std; int main() int a6=23, 15, 64, 33, 40, 58; int s1, s2;
29、s1=s2=a0; for(int* p=a+1; p if(s1*p) s1=*p; if(s2*p) s2=*p; couts1+s2 return 0; /s1+s2 运行时的输出结果是_。(分数:2.50)A.23B.58C.64D.79 解析:解析 本题考查的知识点是指针和一维数组。在 C+中,指针和数组的关系极为密切。指针和数组常常可以互换。数组的名字就是指向该数组第一个元素(下标为 0)的指针,即该数组第一个元素的地址,也即数组的首地址。int* p=a+1;p 指向数组 a 第二个元素。26.有如下程序: #include using namespace std; void f
30、1(int x=y; y=z; void f2(int x; int y) int z=x; x=y; y=z; int main() int x=10, y=26; f1(x, y); f2(x, y); couty return 0; /y 运行时的输出结果是_。(分数:2.50)A.10B.16 C.26D.36解析:解析 本题考查的知识点是参数的传递方式。一种是传值,传值调用主要用在只是需要实参的值,而不需要改变实参的值的情况。另一种是传地址和传应用,可以通过函数调用来改变实参变量的值,或通过函数调用返回多个值,这时仅靠传值方式是不能达到目的的。该题中 f2 属于传值方法,而 f1 属
31、于传地址。27.有如下程序: #include using namespace std; class XA int a; public: static int b; XA(int aa):a(aa)b+; XA() int get()return a; ; int XA:b=0; int main() XA d1(2), d2(3); cout return 0; 运行时的输出结果是_。(分数:2.50)A.5B.6C.7D.8 解析:解析 本题考查的知识点是类的定义。类是对一组性质相同对象的描述。类的定义形式一般分为说明部分和实现部分。说明部分是用来说明该类中的成员,实现部分是用来对成员函数
32、的定义。类的一般定义形式为: /类的说明部分 class类名 public: 公有的数据和函数 protected: 保护的数据和函数 private: 私有的数据和函数 ; /类的实现部分 各个成员函数的实现28.有如下程序: #include using namespace std; class Point int x, y; public: Point(int x1=0, int y1=0):x(x1), y(y1) int get()return x+y; ; class Circle Point center; int radius; public: Circle(int cx, i
33、nt cy, int r):center(cx, cy), raaius(r) int get()return center.get()+radius; ; int main() Circle c(3, 4, 5); coutc.get() return 0; /c.get() 运行时的输出结果是_。(分数:2.50)A.5B.7 C.9D.12解析:解析 本题考查的知识点是类的继承和派生。类的继承是新的类从已有类那里得到已有的特性,如数据成员、成员函数等。类的派生是从已有的类产生新类的过程。在继承过程中,原有的类或已经存在的用来派生新类的类成为基类或父类,而由已经存在的类派生出的新类则称为派
34、生类或子类。派生类具有基类的数据成员和成员函数,同时增加了新的成员。29.若要对类 BigNumber 中重载的类型转换运算符 long 进行声明,下列选项中正确的是_。(分数:2.50)A.operator long() const;B.operator long(BigNumber);C.long operator long() const; D.long operator long(BigNumber);解析:解析 本题考查的知识点是重载运算符。类型转换符必须作为成员函数重载。在重载类型转换符时,其类型名就是返回值类型,故不需要返回值类型的声明。重载类型转换符“long”的语法形式为:
35、operator long(参数表) /函数体 30.有如下函数模板定义: template T1 FUN(T2 n)return n*5.0; 若要求以 int 型数据 9 作为函数实参调用该模板,并返回一个 double 型数据,则该调用应表示为_。(分数:2.50)A.FUN(9)B.FUN9C.FUNdouble(9)D.FUN9(double) 解析:解析 本题考查的知识点是函数模板中声明的函数称为模板函数。编译系统将依据每一次对模板函数调用时实际所使用的数据类型生成适当的调用代码,并生成相应的函数版本。编译系统生成函数模板的某个具体版本的过程称为函数模板的实例化,每一个实例就是一个
36、函数定义。 在实例化的过程中,用实参的实际类型(如 int、long 等)代替虚拟类型(如上面的 T)。31.下列语句都是程序运行时的第 1 条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是_。(分数:2.50)A.coutinternal32345;B.coutleft12345;C.coutright12345; D.coutsetw(6)12345;解析:解析 本题考查的知识点是输出对齐方式的控制。left:在设定的宽度内左对齐输出,右端以设定的字符填充。right:(默认设置)在设定的宽度内右对齐输出。internal:在设定的宽度内右对齐输出;但若有符号(-或+),符号
37、置于最左端。32.下列关于析构函数的描述中,错误的是_。(分数:2.50)A.析构函数可以重载B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数 解析:解析 本题考查的知识点是析构函数。析构函数的功能是用来释放一个对象,在对象删除前,用它来做一些清理工作。 (1)析构函数是特殊的成员函数,函数体可以写存类体内,也可写在类体外。该函数的名字为求反符号“”后面跟着类名,该函数不能指定返回类型,不能有参数,也不能重载。 (2)一个类只能定义一个析构函数。 (3)析构函数在对象生命周期结束时被系统直接调用,程序中一般不调用析构函数。 (4)运算符 delete 与析构函
38、数一起使用。33.下列关于构造函数的描述中,错误的是_。(分数:2.50)A.构造函数名与类名相同B.构造函数可以有返回值C.构造函数可以重载 D.每个类都有构造函数解析:解析 本题考查的知识点是构造函数。构造函数的功能是在创建对象时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于其他对象的特征。 构造函数的特点: (1)构造函数是特殊的成员函数,函数体可以写在类体内,也可以写在类体外。该函数的名字与类名相同,该函数不能指定返回类型。 (2)构造函数一股都被声明为公有函数。构造函数可以重载,即可以定义多个参数个数不同或参数类型不同的构造函数。 (3)构造函数在定义对象时被
39、系统直接调用,程序中不能直接调用构造函数。 (4)应用构造函数初始化对象的语法形式为: 类名对象名(构造函数的参数表); (5)运算符 new 和构造函数一起使用。 (6)定义对象数组时只能调用没有参数或所有参数都有默认值的构造函数。 (7)定义对象指针时不会调用构造函数,因为此时指针还没有实例化。34.若 PAT 是一个类,则程序运行时,语句“PAT(*ad)3;”调用 PAT 的构造函数的次数是_。(分数:2.50)A.0 B.1C.2D.3解析:解析 本题考查的知识点是构造函数的调用。定义对象指针时不会调用构造函数,因为此时指针还没有实例化。35.下列描述中,错误的是_。(分数:2.50
40、)A.公有继承时基类中的公有成员在派生类中仍是公有成员 B.公有继承时基类中的保护成员在派生类中仍是保护成员C.保护继承时基类中的公有成员在派生类中仍是公有成员D.保护继承时基类中的保护成员在派生类中仍是保护成员解析:解析 本题考查的知识点是派生类对基类成员的访问权限。基类中的私有成员在派生类中总是隐藏的,只能在基类内部访问。派生类中的成员总是可以访问基类中的公有成员和保护成员。36.生成派生类对象时,派生类构造函数调用基类构造函数的条件是_。(分数:2.50)A.无须任何条件B.基类中鼎式定义了构造函数 C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数解析:解析 本题考
41、查的知识点是派生类的构造函数。在多继承派生中,基类构造函数调用的顺序按照定义派生类时基类声明的顺序进行,即基类中显式定义了构造函数,而与派生类构造函数的成员初始化列表给出的顺序无关。37.下列关于派生类和基类的描述中,正确的是_。(分数:2.50)A.派生类成员函数只能访问基类的公有成员B.派生类成员函数只能访问基类的公有和保护成员 C.派生类成员函数可以访问基类的所有成员D.派生类对基类的默认继承方式是公有继承解析:解析 本题考查的知识点是派生类对基类成员的访问权限。派生类中的成员总是可以访问基类中的公有成员和保护成员。38.有如下类模板定义: template class BigNumbe
42、r long n; public: BigNumber(T i):n(i) BigNumber operator+(BigNumber b) return BigNumber(n+b.n); ; 已知 b1、b2 是 BigNumber 的两个对象,则下列表达式中错误的是_。(分数:2.50)A.b1+b2B.b1+3 C.3+b1D.3+3解析:解析 本题考查的知识点是运算符重载。加法运算符“+”是一个二元运算符,当作为成员函数重载时参数表中只有 1 个参数,对应于第二个操作数,而第一个操作数是对象本身,以 this 指针的形式隐藏在参数表中。39.下列关于文件流的描述中,正确的是_。(分数
43、:2.50)A.文件流只能完成针对磁盘文件的输入/输出B.建立一个文件流对象时,必须同时打开一个文件C.若输入流要打开的文件不存在,将建立一个新文件D.若输出流要打开的文件不存在,将建立一个新文件 解析:解析 本题考查的知识点是输入/输出文件流。如果以 ios_base:in 模式打开文件而文件又不存在,通过 fail()可测出打开失败(返回值为 true)。如果以 ios_base:out 模式打开文件而文件又不存在,则将自动建立一个新文件。因此可以用输入文件流来检测文件是否存在,利用输出文件流创建文件。40.有如下程序: #include using namespace std; clas
44、s Pair int m, n; public: Pair(int j, int k):m(j), n(k) int get()return m; int get() constreturn m+n; ; int main() Pair a(3, 5); const Pair b(3, 5); couta.get()b.get(); return 0; 运行时的输出结果是_。(分数:2.50)A.33B.38 C.83D.88解析:解析 本题考查的知识点是构造函数。a(3.5)调用 int get()函数,构造对 m,n 赋值 get 函数输出 m=3,而 const Pair b(3, 5)调用 int get()const 函数输出 m+n=8。所以选择 B。