007《面向对象程序设计》精彩试题及问题详解.docx

上传人:b****6 文档编号:6175028 上传时间:2023-01-04 格式:DOCX 页数:13 大小:19.17KB
下载 相关 举报
007《面向对象程序设计》精彩试题及问题详解.docx_第1页
第1页 / 共13页
007《面向对象程序设计》精彩试题及问题详解.docx_第2页
第2页 / 共13页
007《面向对象程序设计》精彩试题及问题详解.docx_第3页
第3页 / 共13页
007《面向对象程序设计》精彩试题及问题详解.docx_第4页
第4页 / 共13页
007《面向对象程序设计》精彩试题及问题详解.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

007《面向对象程序设计》精彩试题及问题详解.docx

《007《面向对象程序设计》精彩试题及问题详解.docx》由会员分享,可在线阅读,更多相关《007《面向对象程序设计》精彩试题及问题详解.docx(13页珍藏版)》请在冰豆网上搜索。

007《面向对象程序设计》精彩试题及问题详解.docx

007《面向对象程序设计》精彩试题及问题详解

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

面向对象程序设计试题

课程代码:

02328

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

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

号内。

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

1.以下说法中正确的是(     )

A.C++程序总是从第一个定义的函数开始执行

B.C++程序总是从main函数开始执行

C.C++函数必须有返回值,否则不能使用函数

D.C++程序中有调用关系的所有函数必须放在同一个程序文件中

2.以下关于函数模板叙述正确的是(     )

A.函数模板也是一个具体类型的函数

B.函数模板的类型参数与函数的参数是同一个概念

C.通过使用不同的类型参数,函数模板可以生成不同类型的函数

D.用函数模板定义的函数没有类型

3.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是(     )

A.作为友元函数重载的1元运算符

B.作为成员函数重载的1元运算符

C.作为友元函数重载的2元运算符

D.作为成员函数重载的2元运算符

4.构造函数不具备的特征是(     )

A.构造函数的函数名与类名相同

B.构造函数可以重载

C.构造函数可以设置默认参数

D.构造函数必须指定类型说明

5.在C++中,封装是借助什么达到的(     )

A.结构                                                          B.数组    

C.类                                                             D.函数

6.在哪种情况下适宜采用inline定义内联函数?

(     )

A.函数体含有循环语句                                B.函数体含有递归语句

C.函数代码少、频繁调用                            D.函数代码多、不常调用

7.在关键字public后面定义的成员为类的(     )

A.私有成员                                                 B.公用成员  

C.保护成员                                                 D.任何成员

8.以下哪个基类中的成员函数表示纯虚函数?

(     )

A.virtualvoidtt()=0                                      B.voidtt(int)=0

C.virtualvoidtt(int)                                        D.virtualvoidtt(int){}

9.假定AA是一个类,“AA*abc()const;”是该类中一个成员函数的原型,若该函数返回this

值,当用x.abc()调用该成员函数后,x的值(     )

A.已经被改变                                              B.可能被改变

C.不变                                                        D.受到函数调用的影响

10.C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是(     )

A.增加了一些新的运算符

B.允许函数重载,并允许设置缺省参数

C.规定函数说明符必须用原型

D.引进了类和对象的概念

二、填空题(本大题共10小题,每小题2分,共20分)

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

错填、不填均无分。

11.如果一个派生类只有一个唯一的基类,则这样的继承关系称为____________。

12.C++支持两种多态性:

____________时的多态性和运行时的多态性。

13.若要保证一个公共的基类在派生类中只产生一个基类子对象,则必须都以____________的方式直接继承它。

14.所有模板都以template关键字和一个____________表开头。

15.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的____________语句。

16.类型转换函数没有返回值类型,而且参数表为____________。

17.C++提供的预处理命令有嵌入指令,条件编译指令和____________。

18.对象将其大部分实现细节隐藏起来,这种机制称为____________。

19.定义类动态对象数组时,其元素只能靠自动调用该类的____________来进行初始化。

20.在函数体之前加____________关键字可以防止覆盖函数改变数据成员的值。

三、改错题(本大题共2小题,每小题6分,共12分)

21.下面是分数类fract的定义及测试主程序,在类定义及其友元函数定义中1到6行中有三处错误,更正错误后程序应显示41/28,请指出错误所在行的行号并给出改正意见。

classfract{

intden;          //分子

intnum;          //分母

public                                                                            //1行

fract(intd=0,intn=1):

den(d),num(n){}              //2行

friendfract&operator+=(fract,fract&);                    //3行

voidshow(){cout<

};                                                                               //5行

friendfract&operator+=(fractf1,fractf2)                   //6行

{                                                                                //7行

f1.den=f1.den*f2.num+f1.num*f2.den;               //8行

f1.num*=f2.num;                                              //9行

returnf1;                                                           //10行

}

voidmain(){

fractfr(3,4);

fr+=fract(5,7);

fr.show();

}

 

错误行的行号为____________、____________和____________。

分别改正为____________、____________和____________。

22.下面程序段第13-17行中存在着三条语句错误,请指出错误语句的行号并说明原因。

class A{                                            //1行

inta;                                         //2行

public:

                                            //3行

A(intaa=0):

a(aa){}                     //4行

};                                                   //5行

classB{                                         //6行

inta,b;                                        //7行

constintc;                                         //8行

Ad;                                            //9行

public:

                                            //10行

B():

c(0){a=b=0;}                        //11行

B(intaa,intbb):

d(aa+bb){            //12行

a=aa;b=bb;c=aa-bb;              //13行

}                                                       //14行

}                                                    //15行

Ba,b(1,2);                                      //16行

Bx=a,y(b),z(1,2,3);                         //17行

错误行的行号为____________、____________和____________。

错误原因分别为____________、____________和____________。

四、程序填空题(本大题共3小题,每小题6分,共18分)

请按提示要求完成以下程序段的填空。

23.在下面一段类定义中,Derived类是由直接基类Base1和Base2所派生的,Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x成员和属于基类Base2的x成员。

classBaseBase{

protected:

intx;

public:

BaseBase(){x=1;}

};

classBase1:

publicBaseBase{

public:

Base1(){}

};

classBase2:

publicBaseBase{

public:

Base2(){}

};

classDerived:

____________

(1)____________

{

public:

Derived(){}

      voidInit(intx1,intx2){

____________

(2)____________;

____________(3)____________;

 }

 voidoutput(){cout<

:

x<<’’<

:

x<

};

 

(1)             

(2)              (3)

24.#include

#include

classA{

  int*a;intn;intMaxLen;

public:

A():

a(0),n(0),MaxLen(0){}

A(int*aa,intnn,intMM){

n=nn;

MaxLen=MM;

if(n>MaxLen)exit

(1);

a=newint[MaxLen];

____________(4)____________;         //以i为循环变量把aa数组中每个元素值

//传送给a数组的对应元素中

}

~A();

intGetValue(inti){returna[i];}//函数体返回a[i]的值

};

 

____________(5)____________//析构函数的类外定义

 

voidmain()

{

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

  Ar(b,10,10);

inti,s=0;

____________(6)____________;//以i为循环变量,把r对象的a数据成员中的

//每个元素值依次累加到s中

cout<<"s="<

}

(4)                 (5)                (6)

25.下面是一维数组类ARRAY的定义,ARRAY与普通一维数组区别是:

(1)用()而不是[]进行下标访问,

(2)下标从1而不是从0开始,(3)要对下标是否越界进行检查。

classARRAY{

int*v;//指向存放数组数据的空间

ints;//数组大小

public:

ARRAY(inta[],intn);

~ARRAY(){delete[]v;}

intsize(){returns;}

int&operator()(intn);

};

____________(7)____________operator()(intn)

{//()的运算符函数定义

if(____________(8)____________){cerr<<"下标越界!

";exit

(1);}//exit函数的功能是退出程序运行

return____________(9)____________;

}

(7)          (8)               (9)

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

阅读以下程序,写出其运行结果。

26.#include

classtest{

private:

staticintval;

inta;

public:

staticintfunc();

staticvoidsfunc(test&r);

};

inttest:

:

val=10;

inttest:

:

func()

{

val--;

returnval;

}

voidtest:

:

sfunc(test&r)

{

r.a=15;

cout<<"result3="<

}

voidmain()

{

cout<<"resultl="<

:

func()<

testa;

cout<<"result2="<

test:

:

sfunc(a);

}

 

27.#include

classposition{

public:

intx,y;

voidinit(intinitx,intinity);

intgetxvalue();

intgetyalue();

};

voidposition:

:

init(intinitx,intinity)

{

x=initx;

y=inity;

}

intposition:

:

getxvalue()

{

returnx;

}

intposition:

:

getyalue()

{

returny;

}

voidprintout(position&rl)

{

cout<

}

voidmain()

{

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

position*pa=a;

a[2].init(7,8);

pa->init(5,6);

for(inti=0;i<5;i++)

printout(*(pa++));

}

 

28.#include

classtest{

public:

virtualvoidfun1(){

cout<<"testfun1"<

virtualvoidfun2(){

cout<<"testfun2"<

voidfun3(){

cout<<"testfun3"<

};

classftt:

publictest

{

public:

voidfun1(){cout<<"fttfun1"<

virtualvoidfun2(){cout<<"fttfun2"<

virtualvoidfun3(){cout<<"fttfun3"<

};

voidmain()

{

test*pp;

fttq;

pp=&q;

pp->fun1();

pp->fun2();

pp->fun3();

}

 

29.#include

classcomplex{

intreal;

intimag;

public:

complex(intr=0,inti=0):

real(r),imag(i){}

complexoperator++(){real++;return*this;}

voidshow(){cout<

};

voidmain(){

complexc(5,9);

++c;

c.show();

}

30.#include

classA{

inta;

public:

A(intaa=0):

a(aa){cout<

~A(){cout<<"11"<

};

voidmain(){

A*p;

Ax[2]={1,2};

p=newA[3];

delete[]p;

}

 

31.#include

classA{

int*a;

public:

A(intx=0):

a(newint(x)){}

~A(){deletea;}

intgetA(){return*a;}

voidsetA(intx){*a=x;}

};

voidmain(){

Ax1,x2(3);

A*p=&x2;

p->setA(x2.getA()+5);

x1.setA(15+x1.getA());

cout<

}

200710易老师做的参考答案

一、1.B2.C3.B4.D5.C6.C7.B8.A9.C10.D

二、11.单继承12.编译13.virtualpublic14.虚拟的类型参数15.声明

16.空17.常变量18.封装19.构造函数20.const

三、21错误的行为:

136

分别改正为:

public:

friendfract&operator+=(fract&,fract&);

fract&operator+=(fract&f1,fract&f2)

22错误的行为:

131517

分别改正为:

B(intaa,intbb):

d(aa+bb),c(aa-bb){//12行

a=aa;b=bb;//13行

};//15行

Bx=a,y(b),z(1,2);//17行

23publicBase1,publicBase2

Base1:

:

x=x1;

Base2:

:

x=x2;

24for(inti=0;i

A:

:

~A(){delete[]a;}

for(i=0;i<10;i++)s=s+r.GetValue(i);

25int&ARRAY:

:

n>ss

26resultl=9

resultl=8

resultl=15

2756

22

78

44

55

66

28fttfun1

fttfun2

testfun3

296

9

30120001111111111(每个数据占一行显示)

31158

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1