自学考试面向对象程序设计试题一 下载本文

全国2005年1月高等教育自学考试

面向对象程序设计试题

课程代码:02328

一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。

每小题2分,共38分)

1.下面对于指针的描述不正确的是( )。 A.指针是地址变量

B.指针不能用除0以外的常量赋值 C.两个指针变量的加减法无意义

D.指针指向不同基类型的变量长度不同

2.下面对于析构函数的描述中不正确的是( )。

A.析构函数是内置函数 B.析构函数与类名相同

C.析构函数不能有参数 D.析函数在对象撤销时自动执行 3.下列指针用法中错误的是( )。 A. int i;int*ptr=&i; B. int i;int *ptr;i=*ptr; C. int *ptr;ptr=0; D. int i=5;int *ptr;*ptr=i; 4.派生类的对象对它的基类成员中什么是可访问的( )? A.公有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.私有继承的公有成员 5.在( )情况下适宜采用inline定义内联函数。

A.函数体含有循环语句 B.函数体含有递归语句 C.需要加快程序的执行速度 D.函数代码多、不常调用 6.在类中说明的成员可以使用关键字( )进行修饰。 A. public B. extern C. cpu D. register

7.如果类A被说明成类B的友元,则( )。 A.类A的成员即类B的成员 B.类B的成员即类A的成员

C.类A的成员函数不得访问类B的成员 D.类B不一定是类A的友元

8.定义析构函数时,应该注意( )。

A.其名与类名完全相同 B.返回类型是void类型

C.无形参,也不可重载 D.函数体中必须有delete语句 9.在类中声明转换函数时不能指定( )。 A.参数 B.访问权限 C.操作 D.标识符

10.在派生类中重新定义虚函数时必须在( )方面与基类保持一致。 A.参数类型 B.参数名字 C.操作内容 D.赋值

-第 1 页 共 3 页 -

11.设int a=3,b=4,c=5;表达式(a+b)>c&&b==c的值是( )。 A. 2 B. -1 C. 0 D. 1

12.下列标识符中,不合法的用户标识符为( )。 A. a#b B. _int C. a_10 D. PAd

13.while(!x)中的(!x)与下面条件( )等价。 A. x==1 B. x!=1 C. x!=0 D. x==0 14.每个类( )构造函数。

A.只能有一个 B.只可有公有的 C.可以有多个 D.只可有缺省的

15.在一个类中可以对一个操作符进行( )重载。 A. 1种 B. 12种以下 C. 32种以下 D. 多种

16.重载赋值操作符时,应声明为( )函数。 A.友元 B.虚 C.成员 D.多态

17.在私有继承的情况下,基类成员在派生类中的访问权限( )。 A.受限制 B.保持不变 C.受保护 D.不受保护

18.通过( )调用虚函数时,采用动态束定。 A.对象指针 B.对象名 C.成员名限定 D.派生类名

19.在类中声明转换函数时不能指定( )。 A.参数个数 B.访问权限 C.标识符 D.操作 二、填空题(每空2分,共22分)

1.派生类的主要用途是可以定义其基类中_______。 2.当建立_______,程序自动调用该类的构造函数。 3.定义重载函数函数时,应在_______上有所不同。

4.类是用户定义的类型,具有类类型的变量称作_______。

5.当一个成员函数被调用时,该成员函数的_______指向调用它的对象。 6.拷贝函数通过_______使用引用来初始化创建中的对象。 7.在一个类中至少可以对一个_______进行2种重载。 8.在C++中有二种_______方式即值传递和_______传递。 9.函数的_______性通过虚函数来实现的。

10.使用空的虚函数可以保证_______建立起一条存取路径,使派生类通过虚函数机制正确存取虚函数。三、完成程序题(每小题5分,共20分)

1.在下面程序的底画线处填上适当的字句,使该程序执行结果为60。

# include class base{int X;

public∶

void int (int initX){X=initX; } int Getnum() {return X+7; }

void main() {_______ _______

cout<

2.在下面程序的底画线处填上适当的字句,完成类中成员函数的定义。 # include class box{ private∶

int color;int upx,upy;int lowx,lowy;

public∶

friend int same_color(line a,box b); _______;

void define_box(int x1,int y1,int x2,int y2){upx=x1;upy=y1;} };

class line{ private∶

int color;int startx,starty;int len; public∶

friend_int same_color(line a,box b); _______;

void define_line(int x,int y){startx=x;} };

int same_color(line a,box b) {if(a.color= =b.color)

return 1; return 0;}

3.在下面程序的底画线处填上适当的字句,完成程序。 # include class A{

_______(int i){cout<

closs B∶A{

public∶void h(){cout<<”h\n”;} _______; };

void main()

-第 2 页 共 3 页 -

{ B d1;

d1.f(6); d1.h(); }

4.在下列程序的空格处填上适当的字句,使输出为:0,8,5。 # include # include class Magic{

double x; public∶

Magic(double d=0.00)∶x(fabs(d)){}

Magic _______{return Magic(sqrt(x*x+c.x*c.x));} _______<<(ostream & os,Magic c){return os<

void main() {Magic ma;

cout<

四、综合应用题(共20分)

1.分析下列程序可能的输出结果。(8分) # include “iostream.h” class test{private∶

int num; float fl; public∶

test( );

int getint( ){return num;} float getfloat( ){return fl;} ~test( ); };

test∶∶test( );

{cout<<″lnitalizing default″<

test∶∶~test( )

{cout<<″Desdtructor is active″<

cout<

2.下列shape类是一个表示形状的抽象类,length()为求图形周长的函数,total()则是一个通用的用以求不同形状的图形周长总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求周长函数。给出shape,total的定义如下所示。(12分) class shape{ public∶

virtual float length( )=0 };

float total(shape *s[],int n) {

float sum=0.0; for(int i=0;ilength( ); return sum; }

-第 3 页 共 3 页 -