全国自考面向对象程序设计试题及答案解析.docx

上传人:b****8 文档编号:10126779 上传时间:2023-05-23 格式:DOCX 页数:17 大小:18.97KB
下载 相关 举报
全国自考面向对象程序设计试题及答案解析.docx_第1页
第1页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第2页
第2页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第3页
第3页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第4页
第4页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第5页
第5页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第6页
第6页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第7页
第7页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第8页
第8页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第9页
第9页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第10页
第10页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第11页
第11页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第12页
第12页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第13页
第13页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第14页
第14页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第15页
第15页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第16页
第16页 / 共17页
全国自考面向对象程序设计试题及答案解析.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

全国自考面向对象程序设计试题及答案解析.docx

《全国自考面向对象程序设计试题及答案解析.docx》由会员分享,可在线阅读,更多相关《全国自考面向对象程序设计试题及答案解析.docx(17页珍藏版)》请在冰点文库上搜索。

全国自考面向对象程序设计试题及答案解析.docx

全国自考面向对象程序设计试题及答案解析

 

全国2018年10月高等教育自学考试

面向对象程序设计试题

课程代码:

02328

一、单项选择题(本大题共12小题,每小题2分,共24分)

在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。

错选、多选或未选均无分。

1.所谓多态性是指()

A.不同的对象调用不同名称的函数B.不同的对象调用相同名称的函数

C.一个对象调用不同名称的函数D.一个对象调用不同名称的对象

2.有如下程序段:

int*p,a[6]={-1,0,1,2,3,4};p=a+3;

执行该程序段后,*p的值为()

A.4B.2

C.1D.NULL

3.类MyA的拷贝初始化构造函数是()

A.MyA()B.MyA(MyA*)

C.MyA(MyA&)D.MyA(MyA)

4.一个函数功能不太复杂,但要求被频繁调用,则应把它定义为()

A.内联函数B.重载函数

C.递归函数D.嵌套函数

5.以下有关继承的叙述正确的是()

A.构造函数和析构函数都能被继承

B.派生类是基类的组合

C.派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员

D.基类的公有成员一定能被派生类的对象访问

6.解决二义性问题的方法有()

A.只能使用作用域分辨操作符B.使用作用域分辨操作符或赋值兼容规则

C.使用作用域分辨操作符或虚基类D.使用虚基类或赋值兼容规则

7.假设类X以类Y作为它的一个基类,并且X类的名字func()支配Y类的名字func(),obj为类X的对象,则obj.func()语句实现的功能为()

A.先执行类X的func(),再执行访问类Y的func()

B.先执行类Y的func(),再执行访问类X的func()

C.执行类X的func()

D.执行类Y的func()

8.以下叙述正确的是()

A.构造函数调用虚函数采用动态联编

B.构造函数可以说明为虚函数

C.当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数

D.析构函数调用虚函数采用动态联编

9.以下关于抽象类的描述正确的是()

A.不能说明指向抽象类对象的指针或引用

B.可以说明抽象类对象

C.抽象类的纯虚函数的实现可以由自身给出,也可以由派生类给出

D.抽象类的纯虚函数的实现由派生类给出

10.在下面格式化命令的解释中,错误的是()

A.ios:

:

skipws跳过输入中的空白字符

B.ios:

:

fill()获得当前的填充字符

C.ios:

:

hex转换基数为八进制形式

D.ios:

:

precision返回当前的精度

11.下面运算符中,不能被重载的运算符是()

A.<=B.-C.?

:

D.[]

12.下列有关模板和继承的叙述正确的是()

A.模板和继承都可以派生出一个类系

B.从类系的成员看,模板类系的成员比继承类系的成员较为稳定

C.从动态性能看,继承类系比模板类系具有更多的动态特性

D.相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系

二、填空题(本大题共8小题,每小题2分,共16分)

请在每小题的空格中填上正确答案。

错填、不填均无分。

13.在C++中函数原型不但能标识函数的__________,而且能标识函数参数的__________。

14.如果类的名称是MyClass则析构函数名为__________,一个类最多能有__________个析构函数。

15.假设类X的对象x是类Y的成员对象,则“YObj”语句执行时,先调用类__________的构造函数,再调用类__________的构造函数。

16.基类的公有成员在私有派生类中是__________成员,基类的保护成员在公有派生类中是__________成员。

17.对虚函数使用对象指针或引用,系统使用__________联编,对虚函数使用对象调用时,系统使用__________联编。

18.静态成员定义的关键字为__________,一般通过__________来访问静态成员。

19.类在面向对象程序设计中非常重要,在设计类时可以参考一些原则,如充分利用__________增加类的自身可靠性,通过继承建立__________等等。

20.将关键字__________写在函数体之前函数头之后,说明该函数是一个__________,可以防止函数改变数据成员的值。

三、改错题(本大题共5小题,每小题2分,共10分)

21.指出下面引用性说明类MyClass的用法的错误之处,并说明出错原因。

classMyClass;

voidmain(){

MyClassobj1;

MyClass*p;

voidfunc(MyClassobj);

}

22.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。

classbase{

protected:

intp;

public:

Base(intm){p=m;}

};

voidf()

{Basea(10);

cout<

}

23.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。

classbase{

public:

intx;

};

classOne:

publicbase{};

classTwo:

publicbase{};

classOT:

publicOne,publicTwo{

public:

intfunc();

};

voidmain(){

OTp;

p.base:

:

x;

}

24.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。

classBase{

public:

virtualvoidfun()=0;

};

classTest:

publicBase{

public:

virtualvoidfun(){cout<<″Test.fun=″<

};

voidmain(){

Basea;

Test*p;p=&a;

}

25.下面程序中有一处错误,请用下横线标出错误所在行并提出修改意见。

classA{

private:

staticintx;

};

voidfunc(inta)

{

x=a;

}

四、完成程序题(本大题共5小题,每小题4分,共20分)

26.为使下面程序输出结果为:

1*2

3+4

请在横线处填上适当的字句,以使程序完整。

#include

classA

{

private:

intR1,R2;

public:

A(intr1,intr2){R1=r1;R2=r2;}

voidprint();

voidprint()const;

};

voidA:

:

print()

{

cout<

}

voidA:

:

print()const

{

cout<

}

voidmain()

{

Aa(1,2);

constAb(3,4);

a.print();

b.print();

}

27.在下面横线处填上适当字句,完成类中成员函数的定义。

#include

classA

{

private:

intX,Y;

public:

A(){X=Y=0;}

A(intxx,intyy):

X(xx),Y(yy){}

A(A&a){

①__________

}

intGetX(){returnX;}

intGetY(){returnY;}

voidSetXY(intx,inty){X=x;Y=y;}

};

intmain()

{

A*Ptr=newA[2];

Ptr[0].SetXY(5,10);

Ptr[1].SetXY(15,20);

cout<<″ReleasePtr……″<

②__________;//释放动态分配内存

return0;

}

28.请在横线处填上适当的字句,以使程序完整。

#include

#include″math.h″

classPoint

{

private:

doubleX,Y;

①__________Line;

public:

Point(doublex=0,doubley=0){

X=x;Y=y;

}

Point(Point&p){

X=p.X;Y=p.Y;

}

};

classLine

{

private:

Pointp1,p2;

public:

Line(Point&xp1,Point&xp2):

②__________{}

doubleGetLength();

};

doubleLine:

:

GetLength()

{doubledx=p2.X-p1.X;

doubledy=p2.Y-p1.Y;

returnsqrt(dx*dx+dy*dy);

}

voidmain()

{

Pointp1,p2(3,4);

LineL1(p1,p2);

cout<

}

29.下面程序横线处填上适当的字句,使类定义完整。

#include

#include

classArrayFloat

{

protected:

float*pA;

intsize;//数组大小(元素个数)

public:

ArrayFloat(intsz=10)

{size=sz;

pA=newfloat[size];

}

~ArrayFloat(void)

{

①__________;//释放动态内存

}

intGetSize(void)const

{returnsize;

}

float&operator[](inti)//重载数组元素操作符″[]″

{returnpA[i];

}

voidPrint();

};

voidArrayFloat:

:

Print()

{inti;

for(i=0;i<②__________;i++)

{

if(i%10==0)

cout<

cout<

}

cout<

}

voidmain()

{ArrayFloata(20);

for(inti=0;i

a[i]=(float)i*2;

a.Print();

}

30.在横线处填上适当字句,完成下面复数类的定义。

#include

classComplex

{

private:

doublereal,image;

public:

Complex(doubler=0,doublei=0){real=r;image=i;}

friendComplexoperator+(Complex&a,constComplex&c);//复数加法运算符

Complexoperator=(Complexc2);//复数赋值运算符

};

Complexoperator+(Complex&a,constComplex&b)

{

Complex*t=newComplex(①__________);

return*t;

}

ComplexComplex:

:

operator=(Complexc2)

{

real=c2.real;

image=c2.image;

return(②__________);

}

五、程序分析题(本大题共6小题,每小题5分,共30分)

31.写出下面程序的输出结果。

#include

classB{

private:

intY;

public:

B(inty=0){Y=y;cout<<″B(″<

~B(){cout<<″~B()\n″;}

voidprint(){cout<

};

classD:

publicB{

private:

intZ;

public:

D(inty,intz):

B(y)

{Z=z;

cout<<″D(″<

}

~D(){cout<<″~D()\n″;}

voidprint(){

B∶∶print();

cout<

}

};

voidmain()

{Dd(11,22);

d.print();

}

32.写出下面程序的输出结果。

#include

classA

{

private:

doubleX,Y;

public:

A(doublexx=0,doubleyy=0)

{X=xx;Y=yy;

cout<<″构造函数被调用(″<

}

A(A&p){X=p.X;Y=p.Y;}

};

Af()

{Aa(1,2);

returna;

}

voidmain()

{Aa(4,5);Ab(a);

b=f();

}

33.写出下面程序的输出结果。

#include

classA{

public:

virtualvoidf(){cout<<″A:

:

f()\n″;}

};

classB:

publicA

{

private:

char*buf;

public:

B(inti){

buf=newchar[i];

}

voidf(){

cout<<″B:

:

f()\n″;

}

~B(){delete[]buf;}

};

voidmain()

{A*a=newA;

a->f();deletea;

a=newB(15);a->f();

}

34.写出下面程序的输出结果。

#include

voidmain()

{inta[9]={1,2,3,4,5,6,7,8,9};

for(inti=0;i<9;i++){

cout<

if(i%3==2)

cout<

}

}

35.写出下面程序的输出结果。

#include

template

voidprint(Ta[],intn)

{for(inti=0;i

{cout<

if(i%5==4)

cout<

}

cout<

}

voidmain()

{

inta[]={1,2,3,4,5,6,7};

doubleb[4]={8,9,10,11};

print(a,sizeof(a)/sizeof(int));

print(b,4);

}

36.写出下面程序的输出结果。

#include

classA

{

private:

staticintn;

intX;

public:

A(intx=0){X=x;n++;}

~A(){n--;}

staticintGetNum(){returnn;}

voidprint();

};

voidA∶∶print(){cout<<″n=″<

intA∶∶n=0;

voidmain()

{A*p=newA(12);

p->print();

Aa(34);

a.print();

deletep;

cout<<″n=″<

:

GetNum()<

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2