面向对象程序设计期末复习题.docx

上传人:b****1 文档编号:1712999 上传时间:2023-05-01 格式:DOCX 页数:15 大小:18.40KB
下载 相关 举报
面向对象程序设计期末复习题.docx_第1页
第1页 / 共15页
面向对象程序设计期末复习题.docx_第2页
第2页 / 共15页
面向对象程序设计期末复习题.docx_第3页
第3页 / 共15页
面向对象程序设计期末复习题.docx_第4页
第4页 / 共15页
面向对象程序设计期末复习题.docx_第5页
第5页 / 共15页
面向对象程序设计期末复习题.docx_第6页
第6页 / 共15页
面向对象程序设计期末复习题.docx_第7页
第7页 / 共15页
面向对象程序设计期末复习题.docx_第8页
第8页 / 共15页
面向对象程序设计期末复习题.docx_第9页
第9页 / 共15页
面向对象程序设计期末复习题.docx_第10页
第10页 / 共15页
面向对象程序设计期末复习题.docx_第11页
第11页 / 共15页
面向对象程序设计期末复习题.docx_第12页
第12页 / 共15页
面向对象程序设计期末复习题.docx_第13页
第13页 / 共15页
面向对象程序设计期末复习题.docx_第14页
第14页 / 共15页
面向对象程序设计期末复习题.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

面向对象程序设计期末复习题.docx

《面向对象程序设计期末复习题.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计期末复习题.docx(15页珍藏版)》请在冰点文库上搜索。

面向对象程序设计期末复习题.docx

面向对象程序设计期末复习题

面向对象程序设计试题

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

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

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

  1.有关C++编译指令,以下叙述正确的是()

  A.C++每行可以写多条编译指令

  B.#include指令中的文件名可含有路径信息

  C.C++的编译指令可以以#或//开始

  D.C++中不管#if后的常量表达式是否为真,该部分都需要编译

  2.在C++中把不返回任何类型的函数应该说明为    ()

  A.intB.char

  C.voidD.double

  3.以下有关析构函数的叙述不正确的是()

  A.析构函数没有任何函数类型

  B.析构函数的作用是在对象被撤销时收回先前分配的内存空间

  C.析构函数可以有形参

  D.一个类只有一个析构函数

  4.若Sample类中的一个成员函数说明如下:

  voidset(Sample&a),则Sample&a的含义是()

  A.指向类Sample的名为a的指针

  B.a是类Sample的对象引用,用来作函数Set()的形参

  C.将a的地址赋给变量Set

  D.变量Sample与a按位与的结果作为函数Set的参数

  5.以下叙述错误的是()

  A.基类的保护成员在公有派生类中仍然是保护成员

  B.基类的保护成员在派生类中仍然是保护成员

  C.基类的保护成员在私有派生类中是私有成员

  D.基类的保护成员不能被派生类的对象访问

6.假设ClassY:

publicX,即类Y是类X的派生类,则说明一个Y类的对象时和删除Y类对象时,调用构造函数和析构函数的次序分别为()

  A.X,Y;Y,XB.X,Y;X,Y

  C.Y,X;X,YD.Y,X;Y,X

  7.下列虚基类的说明中,正确的是()

  A.classvirtualB:

publicAB.classB:

virtualpublicA

  C.virtualclassB:

publicAD.classB:

publicAvirtual

  8.要实现动态联编必须()

  A.通过成员名限定来调用虚函数B.通过对象名来调用虚函数

  C.通过派生类对象来调用虚函数D.通过对象指针或引用来调用虚函数

  9.在派生类中定义虚函数时,可以与基类中相应的虚函数不同的是()

  A.参数类型B.参数个数

  C.函数名称D.函数体

  10.下列关于静态数据成员的描述中正确的是()

  A.静态数据成员是类的所有对象所共有的

  B.静态数据成员要在构造函数内初始化

  C.类的每个对象有自己的静态数据成员

  D.静态数据成员不能通过类的对象调用

  11.与C语言printf("Hello,World\n");语句功能相同的C++语句是()

  A.cout>>"Hello,World\n";B.cout<<"Hello,World\n";

  C.cin>>"Hello,World\n";D.cin<<"Hello,World\n";

  12.实现两个相同类型数加法的函数模板的声明是()

  A.add(Tx,Ty)B.Tadd(x,y)

  C.Tadd(Tx,y)D.Tadd(Tx,Ty)

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

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

错填、不填均无分。

  13.在面向对象程序设计中,将一组数据和这组数据有关的操作集合组装在一起形成对象,这个过程叫________;不同的对象可以调用相同名称的函数并导致完全不同的行为的现象称为________。

  14.假如一个类的名称为MyClass,则这个类缺省的构造函数名称为________;使用这个类的一个对象初始化该类的另一个对象时,可以调用________构造函数来完成此功能。

  15.局部对象和全局对象中,在同一程序中________生存期最长;this指针始终指向当前正在发出成员函数调用命令的________。

  16.所谓赋值兼容规则是指在公有派生情况下,一个________类的对象可以作为________类的对象来使用的地方。

  17.带有________的类称为抽象类,它只能作为________来使用。

  18.控制格式输入输出的操作中,函数________是设置域宽的,函数________是设置填充字符。

(要求给出函数名和参数类型)

  19.类模板用来表达具有相同________的数据________集。

  20.对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据,称为________,它的实质就是________。

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

  21.下面类的定义中有一处错误,请用下横线标出错误所在行并说明出错原因。

以下是引用片段:

  classMyClass{

  intx=20,y;

  public:

  MyClass(intaa,intbb);

  intGetX();

  intGetY();

  };

 

  22.以下程序实现交换a,b变量的值,请用下横线标出错误所在行并给出修改意见。

以下是引用片段:

  voidswap(intm,intn)

  {inttemp=m;m=n;n=temp;}

  voidmain()

  {inta=5,b=10;

  swap(a,b);

  cout<<"a="

  }

 

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

以下是引用片段:

  classA{

  intx;

  friendclassB;

  };

  classB{};

  classC:

publicB{

  voidfunc(A*p);

  };

  voidC:

:

func(A*p)

  {p->x--;}

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

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

  Y=1,Y=3,Z=5

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

以下是引用片段:

  #include

  classB{

  private:

  intY;

  public:

  B(inty=0){Y=y;}

  voidprint(){cout<<"Y="<

  };

  classD:

publicB{

  private:

  Bb;

  intZ;

  public:

  D(intx,inty,intz):

B(x),b(y){Z=z;}

  voidprint(){

  ①________;//打印基类B中的成员Y

  ②________;//打印类成员b中的Y值

  cout<<"Z="<

  }

  };

  voidmain()

  {Dd(1,3,5);

  d.print();

  }

 

  27.在下面横线处填上适当字句,完成求最大值函数模板的定义。

以下是引用片段:

  #include

  template

  TMax(Tx,Ty)

  {

  return(x>y?

x:

y);

  }

  ①________

  TMax(Tx,Ty,Tz)

  {

  Tt=Max(x,y);

  return(②________);

  }

  voidmain()

  {

  intx;doubley;

  x=Max(5,6);y=Max(12.3,3.4,7.8);

  cout<<"x="<

  }

 

  28.在下面横线处填上适当字句,完成Distance函数的定义。

以下是引用片段:

  #include

  #include

  classPoint

  {

  private:

  doubleX,Y;

  public:

  Point(doublex=0,doubley=0){X=x;Y=y;}

  voidMove(doublex,doubley){X=x;Y=y;}

  frienddoubleDistance(Point&p1,Point&p2);//计算两点间距

  };

  doubleDistance(Point&p1,Point&p2)

  {doubledx=①________;

  doubledy=②________;

  returnsqrt(dx*dx+dy*dy);

  }

  voidmain()

  {

  Pointa(1,1);

  Pointb(a);

  b.Move(4,5);

  cout<

  }

29.为使下列程序输出结果为:

  A∷f()

  B∷f()

  C∷f()

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

以下是引用片段:

  #include

  classA{

  public:

  ①________{cout<<"A:

:

f()\n";}

  };

  classB:

publicA{

  public:

  voidf(){cout<<"B:

:

f()\n";}

  };

  classC:

publicA{

  public:

  voidf(){cout<<"C:

:

f()\n";}

  };

  voidmain()

  {

  Aa,②________;

  Bb;Cc;

  p=&a;p->f();

  p=&b;p->f();

  p=&c;p->f();

  }

 

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

以下是引用片段:

  #include

  classComplex{

  private:

  floatreal,imag;

  public:

  Complex(floatr=0,floati=0){real=r;imag=i;}

  voidDisplay(){

  cout<

  if(imag>0)cout<<"+"<

  elseif(imag<0)cout<

  cout<

  }

  Complexoperator+(Complex&b);

  friendComplexoperator-(Complex&a,Complex&b);

  };

  ComplexComplex:

:

operator+(Complex&b)

  {

  Complex*t=newComplex(①________);

  return*t;

  }

  Complexoperator-(Complex&a,Complex&b)

  {

  Complex*t=newComplex(②________);

  return*t;

  }

  voidmain()

  {

  Complexc1(4.0,5.0),c2(2.0,-5.0),c3;

  c3=c1+c2;

  c3.Display();

  c3=c1-c2;

  c3.Display();

  }

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

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

以下是引用片段:

  #include

  #include

  inti=1;

  voidother(void)

  {

  staticinta=2,b;

  intc=10;

  a=a+1;i=i+3;c=c+5;

  cout<

  b=a;

  }

  voidmain(void)

  {

  staticinta;

  intb=-5,c=0;

  voidother(void);

  cout<<"iabc\n";

  cout<

  c=c+8;other();

  cout<

  i=i+10;other();

  }

 

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

以下是引用片段:

  #include

  classA

  {

  private:

  intX,Y;

  public:

  A(){

  X=Y=0;

  cout<<"DefaultConstructorcalled."<

  }

  A(intxx,intyy){

  X=xx;Y=yy;

  cout<<"Constructorcalled."<

  }

  ~A(){

  cout<<"Destructorcalled."<

  }

  };

  voidmain()

  {

  A*p1=newA;

  deletep1;

  p1=newA(1,2);

  deletep1;

  }

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

以下是引用片段:

  #include

  classA{

  private:

inta;

  public:

  voidset(intx){a=x;}

  voidshow(){cout<<"a="<

  };

  classB:

publicA{

  private:

intb;

  public:

  voidset(intx=0){A:

:

set(x);b=x;}

  voidset(intx,inty){A:

:

set(x);b=y;}

  voidshow(){A:

:

show();cout<<"b="<

  };

  voidmain(){

  Bb;

  b.set(12);b.show();

  b.set(34,56);b.show();

  }

 

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

以下是引用片段:

  #include

  classA

  {

  private:

constinta;

  staticintb;

  public:

  A(inti):

a(i),r(a){b++;}

  voidprint(){cout<

  constint&r;

  };

  intA:

:

b=0;

  voidmain()

  {Aa1(33);a1.print();

  Aa2(44);a2.print();

  }

 

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

以下是引用片段:

  #include

  voidmain(void)

  {intn=6,k;

  cout<

  for(k=2;k

  if(n%k==0)

  cout<

  cout<

  }

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

以下是引用片段:

  #include

  classB{

  public:

  virtualintf(){return0;}

  };

  classD:

publicB{

  public:

  intf(){return100;}

  };

  voidmain(){

  Dd;

  B&b=d;

  cout<

  cout<

:

f()<

  }

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

当前位置:首页 > 初中教育 > 语文

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

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