(35)有如下程序
#include<iostream>
usingnamespacestd;
classA{
public:
virtualVoidfuncl(){cout<<“A1”;}
voidfune2(){cout<<“A2”;}
};
classB:publicA{
public:
voidfunc1(){cout<<“B1”;}
voidfunc2(){cout<<“B2”;}
};
Intmain(){
A*p=newB;
p->funcl();
p->func2();
retum0;
}
运行程序,屏幕上将显示输出______。
A)、B1B2B)、A1A2C)、B1A2D)、A1B2
二、填空题(每空2分,共30分)
请将每一个空的正确答案写在答题卡[1]~[15]序号的横线上,答在试卷上不得分。
(1)下列软件系统结构图

的宽度为[1]。
(2)[2]的任务是诊断和改正程序中的错误。
(3)一个关系表的行为[3]。
(4)按“行进后出”原则组织数据的数据结构是[4]。
(5)数据结构分为线性结构和非线性结构,带链的队列属于[5]。
(6)若有定义语句:int*a,b;,则变量b的数据类型是[6]。
(7)已知数组a中的元素个数为n,下列语句的作用是将下标为i的元素移动到下标
为i-1的单元,其中1≤i<n。例如,当n=4,a中原有数据为1,2,3,4时,则移动后a
中元素为2,3,4,4。请将语句补充完整:
For(inti=0;i<n-1;i++)a[i]=a[7]。
(8)已知递归函数f的定义如下:
intf(intn)
{
If(n<=1)return1;//递归结束情况
elsereturnn*f(n-2);//递归}则函数调用语句f(5)的返回值是[8]。
(9)创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给
出数组元素的初值,则调用缺省构造函数,下列程序涉及到对象数组的创建和单个对象的创
建,其输出结果是[9]。
#include<iostream>
usingnamespacestd;
classFoo{
public:
Foo(intX){cout<<’A”}
Foo(){}
};
intmain()
Foof[3],g(3);
return0;
}
(10)习惯性在下列程序的输出结果是42,请将画线处缺失的部分补充完整。
#include<iostream>
Usingnamespaceatd;
ClassFoo{
intvalue;
public:
Foo():value(0){}
VoidsetValue(intvalue)
{[10]=value;//给Foo的数据成员value赋值}voidprint(){cout<<value;}
};
Intmain()
{
Foof;
f。setValue(42);
f。print();
retum0;
}
(11)如果不能使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是
只能访问从基数继承的成员,下列程序没有使用多态机制,其输出结果是[11]。
#include<iostream>
usingnamespacestd;
classBase{
public:
Voidprint(){cout<<‘B’;}};
classDerived:publicBase{
public
voidprint(){cout<<‘D’;}}
intmain()
{
Derived*pd=newDreived);
Base*pb=pd;
pb->print();
pd->print();
deletepd;
return0;
}
(12)在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承
private。已知有如下类定义:
classBase{
protected:
voidfun(){}
};
ClassDerived:Base{};
则Base类中的成员函数fun(),在Derived类中的访问权限是[12](注意:要求填
写private、protected或public中的一项)。
(13)在MyClass类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充完整。
[13]MyClass::operator=(constMyClassrhs)
{
if(this=&rhs)return*this;
value=rhs。value;
return*this;
}