11 [单选题] 有如下程序:
运行后的输出结果是( )。
A.2351
B.2531
C.5354
D.5534
参考答案:B
参考解析:
main()函数中调用了B的构造函数,参数为5,接下来B类对象b的构造过程如下:①调用基类A的默认构造函数,构造对象b的基类部分:初始化m_i为2。②按照B类中成员的定义顺序,使用成员初始化列表初始化两个A类成员:首先执行m_a1(m_i+1),m_i为基类A中的成员,此时值为2,调用A类的默认构造函数,初始化m_a1.m_i为3;然后执行m_a2(n),调用A类的默认构造函数,初始化m_a2.m_i为5。接着main()执行return语句,此时对象b需要调用析构函数进行释放,释放过程如下:①首先运行B类的析构函数-B(),输出m_i的值为2,然后将m_i自减1,使得m_i的值为1。②按照8类中成员定义顺序的反顺序,首先调用m_a2的析构函数~A(),释放对象m a2,输出m_a2.m_i的值5;再调用m_a1的析构函数~A(),释放对象m_a1,输出m_a1.m_i的值3。③最后调用基类A的析构函数-A(),释放b对象中的基类部分,输出m_i的值1。 由上分析,程序运行结果为:2531。故本题答案为B选项。
12 [单选题] 有如下程序段:
上述程序使得derived对象中的动态内存空间有可能不被释放,有内存泄漏风险,原因是( )。
A.base类是抽象类
B.derived类的析构函数没有释放基类的动态内存
C.base类的析构函数不是虚函数
D.derived类的resoulce与公有继承得到的resource同名
参考答案:C
参考解析:
基类base中的数据成员resource为整型指针变量,派生类derived中的数据成员resource与基类base中的同名,但类型为浮点型指针变量,基类base中构造函数使用new为resource(整型指针)分配了内存空间,在析构函数中释放;派生类derived的构造函数在成员初始化类表中调用base的构造函数构造对象的基类部分,然后在构造函数体内使用new为resource(浮点型指针)分配了内存空间,在析构函数中释放浮点型resource指针;由于基类base中的析构函数未定义为虚函数,所以派生类derived中的析构函数在被调用时,不会再调用基类base中的析构函数,导致基类base中的整型指针变量resource无法释放,造成内存泄漏。故本题答案为C选项。
13 [单选题] 下列关于抽象类的叙述中,错误的是( )。
A.不能定义抽象类对象
B.抽象类中一定包含纯虚函数
C.抽象类的派生类一定不是抽象类
D.抽象类的构造函可以是protected函数
参考答案:C
参考解析:
含有一个或多个纯虚函数的类是抽象类,不能创建抽象类的对象,选项A、B正确;由于无法创建(也不需要创建)抽象类的对象,所以抽象类的构造函数可以是protected函数,选项D正确;抽象类的派生类,如果也包含纯虚函数,那么该派生类也是抽象类,选项C错误。故本题答案为C选项。
14 [单选题] 一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是( )。
A.一对一
B.一对多
C.多对多
D.多对一
参考答案:C
参考解析:
因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。
15 [单选题] 有如下程序:
执行这个程序的输出结果是( )。
A.1B
B.1D
C.2B
D.2D
参考答案:B
参考解析:
在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,本题中定义了一个指向派生类对象的基类指针ptr,执行ptr->output后,会执行基类的output函数,输出1,由于Print是虚函数,所以ptr->Print()会执行派生类的Print,即输出D,所以本题答案为B。
16 [单选题] 层次型、网状型和关系型数据库划分原则是( )。
A.记录长度
B.文件的大小
C.联系的复杂程度
D.数据之间的联系方式
参考答案:D
参考解析:
层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。
17 [单选题] C++中的模板包括( )。
A.对象模板和函数模板
B.对象模板和类模板
C.函数模板和类模板
D.变量模板和对象模板
参考答案:C
18 [单选题] 现有表示患者和医疗的关系如下:P(P#,Pn,Pg,By),其中P#为患者编号,Pn为患者姓名,Pg为性别,By为出生日期,Tr(P#,D#,Date,Rt),其中D#为医生编号,Date为就诊日期,Rt为诊断结果。检索在1号医生处就诊的病人姓名的表达式是( )。
参考答案:A
参考解析:
π表示投影运算,针对属性;σ表示选择运算,针对元组;▷◁表示自然连接。首先在Tr表中选择D#为1的记录σD#=1(Tr),并检索这些记录中患者的编号πp#(σD#=1(Tr)),检索结果与表P进行自然连接生成中间表计πP#(σD#=1(Tr))▷◁P,最后在中间表中检索患者的姓名πPn(πP#(σD#=1(Tr))▷◁P)。故本题答案为A选项。
19 [单选题] 下列选项中不属于结构化程序设计原则的是( )。
A.可封装
B.自顶向下
C.模块化
D.逐步求精
参考答案:A
参考解析:
结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。
20 [单选题] 已知函数模板定义如下:
不能由该函数模板得到的函数实例是( )。
A.int min(int,int)
B.char min(char,char)
C.double min(int,double)
D.double min(double,double)
参考答案:C
参考解析:
题意中的模板函数min()接收两个参数,参数类型都是T,返回一个T类型的值,所以min()函数的参数、返回值都必须是同一类型,由此可知选项A、B、D可正确得到函数实例,选项C不可以。故本题答案为C选项。