2002年10月全国高等教育自学考试面向对象程序设计试题.doc
《2002年10月全国高等教育自学考试面向对象程序设计试题.doc》由会员分享,可在线阅读,更多相关《2002年10月全国高等教育自学考试面向对象程序设计试题.doc(19页珍藏版)》请在冰豆网上搜索。
一、单项选择题(在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。
每小题2分,共20分)
1.所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()
A.类B.对象C.函数体D.数据块
2.面向对象的程序设计语言必须具备的关键要素是()
A.抽象和封装B.抽象和多态性
C.抽象、封装、继承和多态性D.抽象、封装和继承性
3.类的构造函数被自动调用执行的情况是在定义该类的()
A.成员函数时B.数据成员时
C.对象时D.友元函数时
4.设有函数模板
template
QSum(Qx,Qy){
return(x)+(y);
}
则下列语句中对该函数模板错误的使用是()
A.Sum(10,2);B.Sum(5.0,6.7);
C.Sum(15.2f,16.0f);D.Sum(″AB″,″CD″);
5.已知类A是类B的友元,类B是类C的友元,则()
A.类A一定是类C的友元
B.类C一定是类A的友元
C.类C的成员函数可以访问类B的对象的任何成员
D.类A的成员函数可以访问类B的对象的任何成员
6.如果表达式++i*k中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为()
A.operator*(i.operator++(),k)B.operator*(operator++(i),k)
C.i.operator++().operator*(k)D.k.operator*(operator++(i))
7.下列说法中正确的是()
A.类定义中只能说明函数成员的函数头,不能定义函数体
B.类中的函数成员可以在类体中定义,也可以在类体之外定义
C.类中的函数成员在类体之外定义时必须要与类声明在同一文件中
D.在类体之外定义的函数成员不能操作该类的私有数据成员
8.若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的()
A.私有成员B.公有成员
C.保护成员D.保护成员或私有成员
9.对基类和派生类的关系描述中,错误的是()
A.派生类是基类的具体化B.基类继承了派生类的属性
C.派生类是基类定义的延续D.派生类是基类的特殊化
10.类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,则p->A:
:
func()将()
A.调用类A中的函数func()
B.调用类B中的函数func()
C.根据p所指的对象类型而确定调用类A中或类B中的函数func()
D.既调用类A中函数,也调用类B中的函数
二、填空题(每小题2分,共20分)
11.假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为__________。
12.模板定义中标识类型的参数必须用关键字_________修饰。
13.表达式count<14.通过C++语言中的_________机制,可以从现存类中构建其子类。
15.要在调用虚函数的时候强制进行静态联编,可以通过在调用中对虚函数加_________实现。
16.封装要求一个对象应具备明确的功能,并具有_________以便和其它对象相互作用。
17.在删除一个动态对象时,将自动调用该动态对象所属类的_________函数。
18.静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是_________。
19.在下面的类定义中,私有成员有_________。
classLocation{
intX,Y;
protected:
intzeroX,zerxY;
intSetZero(intzeroX,intzeroY);
private:
intlength,height;
public:
voidinit(intinitX,intinitY);
intGetX();
intGetY();
};
20.类的私有成员只能被它的成员函数和_________访问。
三、改错题(每小题2分,共10分)
21.此类定义有一处错误,请指出错误并改正。
classABC{
inta;
public:
ABC(intaa)a(aa){}
};
22.下面程序通过调用函数模板实现计算两个正整数的最大公约数,把main函数中错误找出并改正过来。
#include
template
Tgcd(Tx,Ty){
while(x!
=y)
if(x>y)x-=y;
elsey-=x;
returnx;
}
voidmain()
{
inta;
doubled;
cin>>a>>d;
cout<}
23.指出下面程序中的错误,并说明出错原因。
#include
classConstFun{
public:
voidConstFun(){}
constintf5()const{return5;}
intObj(){return45;}
intval;
intf8();
};
intConstFun:
:
f8(){returnval;}
voidmain()
{
constConstFuns;
inti=s.f5();
cout<<″Value=″<
}
24.指出下面程序中的错误,并说明错误原因。
#include
classA{
public:
voidfun(){cout<<″a.fun″<};
classB{
public:
voidfun(){cout<<″b.fun″<voidgun(){cout<<″b.gun″<};
classC:
publicA,publicB{
private:
intb;
public:
voidgun(){cout<<″c.gun<<″endl;}
};
voidmain(){
cobj;
obj.fun();
obj.gun();
}
25.指出下面程序段中的错误,并说明出错原因。
classLocation{
intX,Y;
protected:
intzeroX,zeroY;
intSetZero(intzeroX,intzeroY){X=zeroX;Y=zeroY;}
private:
intlength,height;
public:
floatradius;
voidinit(intinitX,intinitY){length=initX;height=initY;}
intGetX(){returnX;}
intGetY(){returnY;}
};
intmain(){
LocationretangleA={25,20,3,5,6,7,3};
return0;
}
四、完成程序题(每小题4分,共20分)根据题目要求填空,完成程序。
26.在下面程序段横线处填上适当的内容。
classA{
________
intn;
public:
A(intnn=0):
n(nn){
if(n==0)a=0;
elsea=newint[n];
}
________//定义析构函数,释放动态数组空间
};
27.在下面程序横线处填上适当内容,使程序执行结果为:
200__100
程序如下:
#include
template________
Tf(Tx,Ty){
if(sizeof(T)==__________)
returnx+y;
else
returnx*y;
}
voidmain(){
cout<}
28.下面程序三次调用同一函数sum,在横线处填上适当内容,使输出结果为:
S=2
S=5
S=9
程序如下:
#include
voidsum(inti)
{
staticints;
____________;
cout<<″S=″<
}
voidmain(void)
{
inti;
for(i=0;________)
sum(i);
}
29.请在下面横线处填上适当的内容,使程序的输出为:
7.00000
7
程序如下:
#include
viodmain(){
doublex=7;
cout<<______________<cout<}
30.在下面程序横线处填上适当的内容,使该程序输出结果为:
CreatingB
endofB
endofA
程序如下:
#include
classA
{
public:
A(){}
______________{cout<<″endofA″<};
calssB:
publicA
{
public:
B(){________}
~B(){cout<<″endofB″<};
v