1、一、单项选择题 ( 在每小题的四个备选答案中选出一个正确答案,并将其号码填在题干的括号内。每小题 2 分,共 20 分 ) 1. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是 ( ) A. 类 B. 对象 C. 函数体 D. 数据块 2. 面向对象的程序设计语言必须具备的关键要素是 ( ) A. 抽象和封装 B. 抽象和多态性 C. 抽象、封装、继承和多态性 D. 抽象、封装和继承性 3. 类的构造函数被自动调用执行的情况是在定义该类的 ( ) A. 成员函数时 B. 数据成员时 C. 对象
2、时 D. 友元函数时
4. 设有函数模板
template
3、成员函数可以访问类 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. 类定义中只能说明函数成员的函数头,不能定义
4、函数体 B. 类中的函数成员可以在类体中定义,也可以在类体之外定义 C. 类中的函数成员在类体之外定义时必须要与类声明在同一文件中 D. 在类体之外定义的函数成员不能操作该类的私有数据成员 8. 若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的 ( ) A. 私有成员 B. 公有成员 C. 保护成员 D. 保护成员或私有成员 9. 对基类和派生类的关系描述中, 错误 的是 ( ) A. 派生类是基类的具体化 B. 基类继承了派生类的属性 C. 派生类是基类定义的延续 D. 派生类是基类的特殊化
5、 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 的类定义析构函数,则系统自动给出的缺省析构函数定义为 ________
6、 。
12. 模板定义中标识类型的参数必须用关键字 _________ 修饰。
13. 表达式 count< 7、员函数、友元函数、构造函数和析构函数中,不属于成员函数的是 _________ 。
19. 在下面的类定义中,私有成员有 _________ 。
class Location {
int X,Y;
protected:
int zeroX,zerxY;
int SetZero(intzeroX, intzeroY);
private:
int length,height;
public:
void init(int initX,int initY);
int GetX();
int GetY(); 8、
};
20. 类的私有成员只能被它的成员函数和 _________ 访问。
三、改错题 ( 每小题 2 分,共 10 分 )
21. 此类定义有一处错误,请指出错误并改正。
class ABC{
int a;
public:
ABC(int aa)a(aa){}
};
22. 下面程序通过调用函数模板实现计算两个正整数的最大公约数,把 main 函数中错误找出并改正过来。
#include 9、le(x! =y)
if(x>y)x-=y;
else y-=x;
return x;
}
void main()
{
int a;
double d;
cin>>a>>d;
cout< 10、
int Obj() {return 45;}
int val;
int f8();
};
int ConstFun::f8(){return val;}
void main()
{
const ConstFun s;
int i=s.f5();
cout<< ″ Value= ″ <
class A{
public:void fun(){cout<< ″ a.fun ″ 11、< 12、5. 指出下面程序段中的错误,并说明出错原因。
class Location {
int X,Y;
protected:
int zeroX,zeroY;
int SetZero(int zeroX,int zeroY){X=zeroX;Y=zeroY;}
private:
int length,height;
public:
float radius;
void init(int initX,int initY){length=initX;height=initY;}
int GetX(){return 13、X;}
int GetY(){return Y;}
};
int main(){
Location retangleA={25,20,3,5,6,7,3};
return 0;
}
四、完成程序题 ( 每小题 4 分,共 20 分 ) 根据题目要求填空,完成程序。
26. 在下面程序段横线处填上适当的内容。
class A{
________
int n;
public:
A(int nn=0):n(nn){
if(n==0)a=0;
else a=new int [ n ] 14、 ;
}
________// 定义析构函数,释放动态数组空间
};
27. 在下面程序横线处填上适当内容,使程序执行结果为:
200_ _ 100
程序如下:
#include 15、54.5)< 16、
29. 请在下面横线处填上适当的内容,使程序的输出为:
7.00000
7
程序如下:
#include 17、
class A
{
public:
A(){}
______________{cout<< ″ end of A ″ < 18、
31. 当从键盘上输入 1.5 10 时,写出下面程序的执行结果。
#include 19、] ,Tb [ 3 ][ 3 ] ,Tc [ 3 ][ 3 ] )
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++){
c [ i ][ j ] =(T)0
for(int k=0;k<3;k++)
c [ i ][ j ] +=a [ i ][ k ] *b [ j ][ k ] ;
}
}
void main()
{
int a [ 3 ][ 3 ] ={{1,2,3},{4,5,6},{7}},b [ 3 ][ 3 ],
c [ 3 ][ 3 ] ={{2 20、},{0,2},{0,0,2}};
f(a,c,b);
for(int i=0;i<3;i++){
for(int j=0,j<3;j++)
cout<
class FUN{
friend ostream& operator <<(ostream&,FUN);
}fun;
ostream& operator<<(ostream 21、 os,FUN f){
os.setf(ios::left);
return os;
}
void main()
{
cout< 22、
static int func();
static void sfunc(Test &r);
};
int Test::val=20;
int Test::func()
{
val--;
return val;
}
void Test::sfunc(Test &r)
{
r.a=25;
cout<< ″ Result3 ″ =< 23、
Test a;
cout<< ″ Result2= ″ < 24、ss B ″ << endl;}
};
class C:public A, public B
{
public:
void func(){cout<< ″ func in class C ″ < 25、ream.h>
class Location{
public:
int X,Y;
void init(int initX,int initY);
int GetX();
int GetY();
};
void Location::init (int initX,int initY)
X=initX;
Y=initY;
}
int Location::GetX()
{
return X;
}
int Location:GetY()
{
return Y; 26、
}
void display(Location& rL)
{
cout< 27、
全国2002年10月高等教育自学考试面向对象程序设计参考答案
参考答案
一、单项选择题(本大题共lO小题,每小题2分:共20分)
1.B 2.C 3.C 4.D 5.D 6.B 7.B 8.A 9.B 10.A
二、填空题(本大题共10小题,每小题2分,共20分)
11. ~AB(){}
12. class(或typcname)
13.cout,sctf(ios::hex,ios::basefield)
(或cout.setf(ios::hex),或cout< 28、ase::也可)
14. 继承(或派生) 15,域名限制(或其它含义等价的描述)
16.接口〈或界面.或公有成员〉
17.析构
18. 友元函数
19. X,Y,length,height (说明:每答对两个给1分)
20 友元类(或友元函数,或友元)
三、改错题(本大题共5小题:每小题2分,共lO分)说明:各小题中,指出错误得l分,说明出错原因或改正正确得l分。
21.ABC(int aa)与a(aa){}之间少一个冒号,应改为ABC(tnt lla):a(aa){}
22.main函数中的gcd(a,d)改为gcd(a,(int)d) (或把double d;改为int 29、 或把gcd(a,d)改为gcd<int>(a,d)或把gcd(a,b)改为gcd(a,int (d))=
23.程序中第4行“void ConstFun(){}”错误,因为声明构造函数时不能指定返回类型。
24.第15行 obj.fun();语句错误,因为用C类的对象obj对函数fun()的访问是两义的,应使用成员名限定来消除两义性。
25.location retangleA={25,20,3,5,6,7,3};语句错误,因为数据成员不都是公有成员,不能用初始化列
表初始化。
四、完成程序题(本大题共5小题,每小题4分,共20分)
26,int *a; (2分)
~A(){ 30、delete[]a;} (2分)
27.<class I> (2分)
sizeof(double)(或8或其他等价形式)
28.s+=2+i(或其他等价形式) (2分)
i<3;i++(或其他等形式) (2分)
29.setiosflage (ios::showpoint) (2分)
resetiosflags(ios::showpoint) (2分)
说明:其中ios:: 可写成ios_basc::
30. virtual ~A() (2分)
cout<<”creating B”< 31、分)
.(2 分)
5(1分)
10(1分)
32. 2 4 6
8 lO 12
14 0 0
说明:每答对一行得2分,全部答对得5分。
33. * * * * * 12345 (2分)
54321 * * * * * (3分)
34.Result1=19
Result2=18 Result3=d0
说明:(1)写对第一行结果得2分,只写出“Result1=”,而未写出结果“l9”,得l分。
(2)写对第二行结果得3分,只写出“Rcstilt2=18”或“ Rcsidt3=25”,得2分。
(3)第一衍与第二行全写正确,但写在同一行上扣1分。
35.func in class C
func in class C
fund in class C
说明:每答对一行得2分,全部答对得5分。
36.7 8
1 1
2 2
5 3
4 4
说明:每答对一行得1分。






