c++期末试卷及答案

时间:2024-12-17 10:40:00 佩莹 学人智库 我要投稿
  • 相关推荐

c++期末试卷及答案

  在各领域中,我们最少不了的就是试卷了,试卷是课程考核统计分析工作的重要组成部分,它包括试卷的信度、效度、区分度、难度四个方面。你知道什么样的试卷才能切实地帮助到我们吗?下面是小编收集整理的c++期末试卷及答案,欢迎阅读与收藏。

c++期末试卷及答案

  一、选择题(每小题1分,共40分)

  1、下列有关内联函数的叙述中,正确的是( )。

  A.内联函数在调用时发生控制转移

  B.内联函数必须通过关键字inline来定义

  C.内联函数是通过编译器来实现的

  D.内联函数函数体的最后一条语句必须是return语句

  2、语句int*P=&k;定义了指针P,与这个语句等效的语句序列是( )。

  A.int* p;P=&k;

  B.int * P;P=k;

  C.int * p;* P=&k;

  D.int * p;* P=k;

  3、有如下程序:

  #include

  using namespace std;

  class A

  {

  public:

  A(){cout<<”A”;}

  -A(){cout<<”-A”;}

  };

  class B:public A

  {

  A*P;

  public:

  B(){cout<<”B”;P=new A();}

  -B(){cout<<”~B”; p;}

  };

  int main()

  {

  B obj;

  return 0;

  }

  执行这个程序的输出结果是( )。

  A.BAA~A~B~A

  B.ABA~B~A~A

  C.BAA~B~A~A

  D.ABA~A~B~A

  4、有如下类定义:

  class AA

  {

  im a:

  public:

  int getRef()const{return&a;}//①

  int getValue()const{return a;}//②

  void set(int n)const{a=n;}//③

  friend void show(AA aA.const{cout< };

  其中四个函数的定义中正确的是(  )。

  A.①

  B.②

  C.③

  D.④

  5、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。

  A.Data+(DatA.;

  B.Data operator+(DatA.;

  C.Data+operator(DatA.;

  D.operator+(Data,DatA.;

  6、有如下数组声明:int num[10];,下标值引用错误的是( )。

  A.num[10]

  B.num[5]

  C.num[3]

  D.hum[o]

  7、将前缀运算符“--”重载为非成员函数,下列原型中能正确用于类中说明的是(  )。

  A.DeCr&operator--(int);

  B.DeCr operator--(DeCr&,int);

  C.friend DeCr&operator--(DeCr&);

  D.friend DeCr operator--(DeCr&,int);

  8、如果派生类以proteCted方式继承基类,则原基类的proteCted成员和publiC成员在派生类中的访问属性分别是( )。

  A.publiC和publiC

  B.publiC和proteCted

  C.proteCted和publiC

  D.proteCted和proteCted

  9、在函数中,可以用aut0、extem、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是(  )。

  A.auto

  B.extern

  C.register

  D.static

  10、下列程序的输出结果是( )。

  #include

  int rain(iltl a,int B.

  {

  if(a else retum b;

  retum 0;

  }

  void main()

  {

  eout< }

  A.0

  B.1

  C.2

  D.3

  11、 在黑盒测试方法中,设计测试用例的主要根据是( )。

  A.程序内部逻辑

  B.程序外部功能

  C.程序数据结构

  D.程序流程图

  12、 在面向对象方法中,不属于“对象”基本特点的是(  )。

  A.一致性

  B.分类性

  C.多态性

  D.标识唯一性

  13、 有以下程序:

  #include

  void fun(int a,int b,int C.

  { a=456,b=567,c=678;}

  void main()

  {

  int X=10,Y=20,Z=30;

  fun(X,Y,z);

  aout< }

  输出结果是( )。

  A.30,20,10

  B.10,20,30

  C.456,567,678

  D.678,567,456

  14、 对类的构造函数和析构函数描述正确的是( )。

  A.构造函数可以重载,析构函数不能重载

  B.构造函数不能重载,析构函数可以重载

  C.构造函数可以重载,析构函数也可以重载

  D.构造函数不能重载,析构函数也不能重裁

  15、 通过运算符重载,可以改变运算符原有的(  )。

  A.操作数类型

  B.操作数个数

  C.优先级

  D.结合性

  16、 下列关于c++流的描述中,错误的是(  )。

  A.cout>>’A’表达式可输出字符A

  B.eof()函数可以检测是否到达文件尾

  C.对磁盘文件进行流操作时,必须包含头文件fstream

  D.以ios_base:0ut模式打开的文件不存在时,将自动建立一个新文件

  17、耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是(  )。

  A.提高耦合性降低内聚性有利于提高模块的独立性

  B.降低耦合性提高内聚性有利于提高模块的独立性

  C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度

  D.内聚性是指模块间互相连接的紧密程度

  18、 若有如下类声明:

  Class MyClass{ publiC:

  MyClass(  ){Cout<<1;} };

  执行下列语句

  MyClass a,b[2],*p[2]; 程序的输出结果是(  )。

  A.11

  B.111

  C.1111

  D.11111

  19、 下列函数模板的定义中,合法的是(  )。

  A.templateT abs(T X){return x<07-x:X;}

  B.template ClassT abs(T x){return x<07-X:x;}

  C.template Tabs(T X){return x<07-x:X;}

  D.template T abs(T x){return X<0?-X:x;}

  20、 有如下程序:

  #include

  using namespace std;

  class Base{

  int x:

  public:

  Base(int n=0):x(n){cout< int getX()const{return x;}

  };

  cjass Derived:public Base{

  int Y:.

  J;;Iublic:

  Derived(int m,int n):y(m),Base(n){cout< Derived(int m):Y(m){cout< };

  int main()

  {

  Derived dl(3),d2(5,7);

  retum 0;

  }

  执行这个程序的输出结果是( )。

  A.375

  B.357

  C.0375

  D.0557

  21、 关于在调用模板函数时模板实参的使用,下列表述中正确的是(  )。

  A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略

  B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略

  C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略

  D.对于常规参数所对应的模板实参,任何情况下都不能省略

  22、 有如下程序段:

  int i=0,J=1;

  int&r=i;//①

  r=j;//②

  int*P=&i;//⑧

  *P=&r;//④

  其中会产生编译错误的语句是(  )。

  A.④

  B.③

  C.②

  D.①

  23、 有如下程序:

  #include

  using namespace std;

  class Obj{

  static int i;

  public:

  Obj(){i++;}

  一Obj(){i一一;}

  static int getVal(){return i;}

  };

  int Obj:i=0:

  void f(){Obj ob2;cout< int main(){

  Obj obl;

  f();

  Obj}ob3=new Obj;cout

  ob3;cout< return 0;

  }

  执行这个程序的输出结果是(  )。

  A.232

  B.231

  C.222

  D.221

  24、 有如下类定义:

  class MyBase{

  int k;

  public:

  MyBase(int n=O):k(n)}}

  int value()eonst{return k;}

  };

  class MyDerived:MyBase{

  intj;

  public:

  MyDerived(int i):j(i)}}

  int getK()const{return k;}

  int getJ()const{return j;}

  };

  编译时发现有一处语法错误,对这个错误最准确的描述是(  )。

  A.函数9etK试图访问基类的私有成员变量k

  B.在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private

  C.类MyDerived缺少一个无参的构造函数

  D.类MyDerived的构造函数没有对基类数据成员k进行初始化

  25、 下列关于虚基类的描述,错误的是( )。

  A.设置虚基类的目的是为了消除二义性

  B.虚基类的构造函数在非虚基类之后调用

  C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用

  D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数

  26、 在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是(  )。

  A.O(n)

  B.O(n2)

  C.O(1092n)

  D.0(n1092n)

  27、 在软件开发中,需求分析阶段可以使用的工具是(  )。

  A.Ns图

  B.DFD图

  C.PAD图

  D.程序流程图

  28、 有如下类声明:

  class Base{

  protected:

  int amount;

  public:

  Base(int n=0):amount(n){}

  int getAmount()const{retum amount;}

  };

  class Derived:public Base{

  protected:

  int value;

  public:

  Derived(int m,int n):value(m),Base(n){}

  int getData()const{return value+amount;}

  }:

  已知x是一个Derived对象,则下列表达式中正确的是( )。

  A.x.value+X.getAmount()

  B.x.getData()一x.getAmount()

  C.x.getData()一x.amount

  D.x.value+X.amount

  29、 有三个关系R、S和T如下:

  则由关系R和s得到关系T的操作是( )。

  A.自然连接

  B.交

  C.除

  D.并

  30、 下面描述中,不属于软件危机表现的是( )。

  A.软件过程不规范

  B.软件开发生产率低

  C.软件质量难以控制

  D.软件成本不断提高

  31、 有如下程序:

  #inClude using namespaCe std: Class CD{

  publiC:

  ~CD(){Cout<<’C’:} private:

  Char name[80]; };

  int main(){

  CD a,*b,d[2]; return 0;

  执行这个程序的输出结果是( )。

  A.CCCC

  B.CCC

  C.CC

  D.C

  32、 类的析构函数是在( )调用的。

  A.类创建时

  B.创建对象时

  C.删除对象时

  D.不自动调用

  33、 下列关于多态性的描述,错误的是( )。

  A.c++语言中的多态性分为编译时的多态性和运行时的多态性

  B.编译时的多态性可通过函数重载实现

  C.运行时的多态性可通过模板和虚函数实现

  D.实现运行时多态性的机制称为动态绑定

  34、 下列有关类成员的叙述中,正确的是( )。

  A.友元函数是类的成员函数

  B.类成员的默认访问权限是私有的

  C.类成员函数必须声明为公有的

  D.类的静态数据成员不能是常成员

  35、 有如下程序:

  #inClude

  using namespaCe std; ClaSS A{

  publiC:

  A(int i){x=i;}

  void dispa(  ){Cout< int x; };

  Class B:publiC A{ publiC:

  B(int i):A(i+10){x=i;}

  vold dispb(  ){dispa(  );Cout< int x; };

  int main(  )} B b(2); b.dispb(  );

  return 0; }

  执行这个程序的输出结果是(  )。

  A.10,2

  B.12,10

  C.12,2

  D.2,2

  36、 执行下列语句段后,输出字符“*”的个数是( )。

  for(int i=50;i>1;i一=2) tout<<’*’:

  A.24

  B.25

  C.26

  D.50

  37、 有如下类定义:

  Class AA{ int a: PubliC: AA(int n=O):a(n){}

  };

  Class BB:publiC AA{ publiC:

  BB(int n)

  };

  其中横线处的缺失部分是(  )。

  A.:a(n){}

  B.:AA(n){}

  C.{a(n);}

  D.{a=n;}

  38、 判断char型变量c是否为小写字母的正确表达式是( )。

  A.’a’<=c<=’z’

  B.(c>=A.&&(c<=z)

  C.(’a’>=C.||(’z’<=C.

  D.(c>=’a’)&&(c<=,z,)

  39、 决定c++语言中函数的返回值类型的是( )。

  A.return语句中的表达式类型

  B.调用该函数时系统随机产生的类型

  C.调用该函数时的主调用函数类型

  D.在定义该函数时所指定的数据类型

  40、 设int a=1,b=2;,则(a++)+b和a+++b这两个表达式的值分别为( )。

  A.3,3

  B.3,4

  C.4,3

  D.4,4

  二、基本操作题(18分)

  41、

  请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl。程序中位于每个“//ERROR****found料****之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:

  Name:Smith Age:21 ID:99999 CourseNum:12

  Record:970

  注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。

  #include

  using namespace std;

  class Studentlnfo

  {

  protected:

  //ERROR********************found****************

  char Name;

  int Age;

  int ID:

  int CourseNum;

  float Record;

  public:

  Studentlnfo(char*name,int Age,int ID,int coumeNum,float record);

  //ERROR ********************found********************

  void~Studentlnfo(){}

  float AverageRecord(){

  return Record/CourseNum;

  }

  void show()const{

  cout<<”Name:”< <<”CourseNum:”< }

  };

  //ERROR ******************found**************

  StudentInfo StudentInfo(char*Name,int Age,int ID,int CourseNum,float Record)

  {

  Name=name;

  Age=age;

  this一>ID=ID:

  CourseNum=courseNum:

  Record=record;

  }

  int main()

  {

  Studentlnfo st(’’Smith”,21,99999,12,970);

  st.show();

  return 0;

  }

  三、简单应用题(24分)

  42、

  请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了vehiele类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将Vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:

  80

  150

  100

  1

  注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。

  #include

  class vehicle

  {

  private:

  int MaxSpeed;

  int Weight;

  public:

  //*************found************

  vehicle(int maxspeed,int weight):

  ~vehicle(){};

  int getMaxSpeed(){return MaxSpeed;}

  int getWeight(){retum Weight;}

  };

  //****************found************

  class bicycle:public vehicle

  {

  private:

  int Height;

  public:

  bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),Height(height){}

  int getHeight(){retum Height;};

  };

  //*******************found**************

  class motorcar:public vehicle

  {

  private:

  int SeatNum;

  public:

  motorcar(int maxspeed。int weight,int seatnum):vehicle(maxspeed,weight),SeatNum(seatnum){}

  int getSeatNum(){return SeatNum;};

  };

  //*****************found***************

  class motorcycle:

  {

  public:

  motorcycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),bicycle(maxspeed,weight,

  height),motorcar(maxspeed,weight,1){}

  };

  void main()

  {

  motorcycle a(80,150,100);

  cout< cout< cout< cout< }

  四、综合应用题(18分)

  43、

  请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过l00。程序文件包括pmj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。

  屏幕上输出的正确结果应该是:

  Hello!

  Happy new year!

  补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。

  不得修改程序的其他部分。

  注意:

  程序最后调用writeToFil。函数,使用另一组不同的测试数据,将不同的运行结果输出到文件0ut?dat中。

  输出函数writeToFile已经编译为obj文件。

  //proj3.h

  #include

  #include

  using namespace std;

  class MiniString

  {

  pubhc:

  friend。8tream&operator<<(oatream&output,const MiniString&s)//重载流插入运算符

  { output< friend istream&operator>>(istream&input,MiniString&8)//重载流提取运算符

  { char temp[100];//用于输入的临时数组

  temp[0]=’’://初始为空字符串

  input>>setw(100)>>temp;

  int inLen=strlen(temp);//输入字符串长度

  if(inLen!=0)

  }

  s.1ength=inLen;//赋长度

  if(s.sPtr!=0)[]s.sPtr;//避免内存泄漏

  s.sPtr=Hew char[s.1ength+1];

  strcpy(s.sPtr,temp);//如果8不是空指针,则复制内容

  }

  else s.sPtr[0]=’’;//如果s是空指针,则为空字符串

  retum input;

  }

  void modString(const char}string2)//更改字符串内容

  {

  if(strin92 1=0)//如果strin92不是空指针,则复制内容

  {

  if(strlen(strin92)!=length)

  {

  length=strlen(strin92);

  []sPtr;

  sPtr=new char[1ength+1];//分配内存

  }

  strcpy(sPtr,strin92);

  }

  else sPtr[0]=’’;//如果string2是空指针,则为空字符串

  }

  MiniString&operator=f const MiniString&otherString);

  MiniString(corot char*s=""):lengtll((s!=0)?strlen(s):0)//构造函数

  {

  sPtT=0:

  if(1ength[=0)

  setString(S);

  }

  ~MiniString()//析构函数

  {[]sPtr;}

  private:

  int length;//字符串长度

  char*sPtr;//指向字符串起始位置

  void setString(const char*string2)//辅助函数

  {

  sPtr=Dew char[str|en(string2)+1];//分配内存

  if(stnIl92!=0)strcpy(sPtr,string2);//如果string2不是空指针,则复制内容

  else slur[0]=;//如果string2是空指针,则为空字符串

  }

  };

  //pwj3.cpp

  #include

  #include

  using namespace std;

  #include”proj3.h”

  MiniString&MiniStrin9:0perator=(const MiniString&otherString)

  {//重载赋值运算符函数。提示:可以调用辅助函数setString

  //*************333**********

  //*************666**********

  }

  int main()

  {

  MiniSuing strl(”Heuo!”),str2;

  void writeToFile(const char*);

  sir2=strl;//使用重载的赋值运算符

  str2.modString("Happy new year!");

  cout< cout< writeToFile("");

  return 0;

  }

《c++期末试卷及答案.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【c++期末试卷及答案】相关文章:

最新物理期末试卷答案05-13

建筑测量期末试卷答案08-24

小升初期末试卷及答案11-04

初二英语期末试卷及答案09-03

单片机期末试卷及答案11-05

高一物理期末试卷及答案09-03

初二英语下册期末试卷及答案06-19

初二英语下册期末试卷及答案10-25

电机学期末试卷及答案10-18

c++期末试卷及答案

  在各领域中,我们最少不了的就是试卷了,试卷是课程考核统计分析工作的重要组成部分,它包括试卷的信度、效度、区分度、难度四个方面。你知道什么样的试卷才能切实地帮助到我们吗?下面是小编收集整理的c++期末试卷及答案,欢迎阅读与收藏。

c++期末试卷及答案

  一、选择题(每小题1分,共40分)

  1、下列有关内联函数的叙述中,正确的是( )。

  A.内联函数在调用时发生控制转移

  B.内联函数必须通过关键字inline来定义

  C.内联函数是通过编译器来实现的

  D.内联函数函数体的最后一条语句必须是return语句

  2、语句int*P=&k;定义了指针P,与这个语句等效的语句序列是( )。

  A.int* p;P=&k;

  B.int * P;P=k;

  C.int * p;* P=&k;

  D.int * p;* P=k;

  3、有如下程序:

  #include

  using namespace std;

  class A

  {

  public:

  A(){cout<<”A”;}

  -A(){cout<<”-A”;}

  };

  class B:public A

  {

  A*P;

  public:

  B(){cout<<”B”;P=new A();}

  -B(){cout<<”~B”; p;}

  };

  int main()

  {

  B obj;

  return 0;

  }

  执行这个程序的输出结果是( )。

  A.BAA~A~B~A

  B.ABA~B~A~A

  C.BAA~B~A~A

  D.ABA~A~B~A

  4、有如下类定义:

  class AA

  {

  im a:

  public:

  int getRef()const{return&a;}//①

  int getValue()const{return a;}//②

  void set(int n)const{a=n;}//③

  friend void show(AA aA.const{cout< };

  其中四个函数的定义中正确的是(  )。

  A.①

  B.②

  C.③

  D.④

  5、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。

  A.Data+(DatA.;

  B.Data operator+(DatA.;

  C.Data+operator(DatA.;

  D.operator+(Data,DatA.;

  6、有如下数组声明:int num[10];,下标值引用错误的是( )。

  A.num[10]

  B.num[5]

  C.num[3]

  D.hum[o]

  7、将前缀运算符“--”重载为非成员函数,下列原型中能正确用于类中说明的是(  )。

  A.DeCr&operator--(int);

  B.DeCr operator--(DeCr&,int);

  C.friend DeCr&operator--(DeCr&);

  D.friend DeCr operator--(DeCr&,int);

  8、如果派生类以proteCted方式继承基类,则原基类的proteCted成员和publiC成员在派生类中的访问属性分别是( )。

  A.publiC和publiC

  B.publiC和proteCted

  C.proteCted和publiC

  D.proteCted和proteCted

  9、在函数中,可以用aut0、extem、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是(  )。

  A.auto

  B.extern

  C.register

  D.static

  10、下列程序的输出结果是( )。

  #include

  int rain(iltl a,int B.

  {

  if(a else retum b;

  retum 0;

  }

  void main()

  {

  eout< }

  A.0

  B.1

  C.2

  D.3

  11、 在黑盒测试方法中,设计测试用例的主要根据是( )。

  A.程序内部逻辑

  B.程序外部功能

  C.程序数据结构

  D.程序流程图

  12、 在面向对象方法中,不属于“对象”基本特点的是(  )。

  A.一致性

  B.分类性

  C.多态性

  D.标识唯一性

  13、 有以下程序:

  #include

  void fun(int a,int b,int C.

  { a=456,b=567,c=678;}

  void main()

  {

  int X=10,Y=20,Z=30;

  fun(X,Y,z);

  aout< }

  输出结果是( )。

  A.30,20,10

  B.10,20,30

  C.456,567,678

  D.678,567,456

  14、 对类的构造函数和析构函数描述正确的是( )。

  A.构造函数可以重载,析构函数不能重载

  B.构造函数不能重载,析构函数可以重载

  C.构造函数可以重载,析构函数也可以重载

  D.构造函数不能重载,析构函数也不能重裁

  15、 通过运算符重载,可以改变运算符原有的(  )。

  A.操作数类型

  B.操作数个数

  C.优先级

  D.结合性

  16、 下列关于c++流的描述中,错误的是(  )。

  A.cout>>’A’表达式可输出字符A

  B.eof()函数可以检测是否到达文件尾

  C.对磁盘文件进行流操作时,必须包含头文件fstream

  D.以ios_base:0ut模式打开的文件不存在时,将自动建立一个新文件

  17、耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是(  )。

  A.提高耦合性降低内聚性有利于提高模块的独立性

  B.降低耦合性提高内聚性有利于提高模块的独立性

  C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度

  D.内聚性是指模块间互相连接的紧密程度

  18、 若有如下类声明:

  Class MyClass{ publiC:

  MyClass(  ){Cout<<1;} };

  执行下列语句

  MyClass a,b[2],*p[2]; 程序的输出结果是(  )。

  A.11

  B.111

  C.1111

  D.11111

  19、 下列函数模板的定义中,合法的是(  )。

  A.templateT abs(T X){return x<07-x:X;}

  B.template ClassT abs(T x){return x<07-X:x;}

  C.template Tabs(T X){return x<07-x:X;}

  D.template T abs(T x){return X<0?-X:x;}

  20、 有如下程序:

  #include

  using namespace std;

  class Base{

  int x:

  public:

  Base(int n=0):x(n){cout< int getX()const{return x;}

  };

  cjass Derived:public Base{

  int Y:.

  J;;Iublic:

  Derived(int m,int n):y(m),Base(n){cout< Derived(int m):Y(m){cout< };

  int main()

  {

  Derived dl(3),d2(5,7);

  retum 0;

  }

  执行这个程序的输出结果是( )。

  A.375

  B.357

  C.0375

  D.0557

  21、 关于在调用模板函数时模板实参的使用,下列表述中正确的是(  )。

  A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略

  B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略

  C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略

  D.对于常规参数所对应的模板实参,任何情况下都不能省略

  22、 有如下程序段:

  int i=0,J=1;

  int&r=i;//①

  r=j;//②

  int*P=&i;//⑧

  *P=&r;//④

  其中会产生编译错误的语句是(  )。

  A.④

  B.③

  C.②

  D.①

  23、 有如下程序:

  #include

  using namespace std;

  class Obj{

  static int i;

  public:

  Obj(){i++;}

  一Obj(){i一一;}

  static int getVal(){return i;}

  };

  int Obj:i=0:

  void f(){Obj ob2;cout< int main(){

  Obj obl;

  f();

  Obj}ob3=new Obj;cout

  ob3;cout< return 0;

  }

  执行这个程序的输出结果是(  )。

  A.232

  B.231

  C.222

  D.221

  24、 有如下类定义:

  class MyBase{

  int k;

  public:

  MyBase(int n=O):k(n)}}

  int value()eonst{return k;}

  };

  class MyDerived:MyBase{

  intj;

  public:

  MyDerived(int i):j(i)}}

  int getK()const{return k;}

  int getJ()const{return j;}

  };

  编译时发现有一处语法错误,对这个错误最准确的描述是(  )。

  A.函数9etK试图访问基类的私有成员变量k

  B.在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private

  C.类MyDerived缺少一个无参的构造函数

  D.类MyDerived的构造函数没有对基类数据成员k进行初始化

  25、 下列关于虚基类的描述,错误的是( )。

  A.设置虚基类的目的是为了消除二义性

  B.虚基类的构造函数在非虚基类之后调用

  C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用

  D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数

  26、 在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是(  )。

  A.O(n)

  B.O(n2)

  C.O(1092n)

  D.0(n1092n)

  27、 在软件开发中,需求分析阶段可以使用的工具是(  )。

  A.Ns图

  B.DFD图

  C.PAD图

  D.程序流程图

  28、 有如下类声明:

  class Base{

  protected:

  int amount;

  public:

  Base(int n=0):amount(n){}

  int getAmount()const{retum amount;}

  };

  class Derived:public Base{

  protected:

  int value;

  public:

  Derived(int m,int n):value(m),Base(n){}

  int getData()const{return value+amount;}

  }:

  已知x是一个Derived对象,则下列表达式中正确的是( )。

  A.x.value+X.getAmount()

  B.x.getData()一x.getAmount()

  C.x.getData()一x.amount

  D.x.value+X.amount

  29、 有三个关系R、S和T如下:

  则由关系R和s得到关系T的操作是( )。

  A.自然连接

  B.交

  C.除

  D.并

  30、 下面描述中,不属于软件危机表现的是( )。

  A.软件过程不规范

  B.软件开发生产率低

  C.软件质量难以控制

  D.软件成本不断提高

  31、 有如下程序:

  #inClude using namespaCe std: Class CD{

  publiC:

  ~CD(){Cout<<’C’:} private:

  Char name[80]; };

  int main(){

  CD a,*b,d[2]; return 0;

  执行这个程序的输出结果是( )。

  A.CCCC

  B.CCC

  C.CC

  D.C

  32、 类的析构函数是在( )调用的。

  A.类创建时

  B.创建对象时

  C.删除对象时

  D.不自动调用

  33、 下列关于多态性的描述,错误的是( )。

  A.c++语言中的多态性分为编译时的多态性和运行时的多态性

  B.编译时的多态性可通过函数重载实现

  C.运行时的多态性可通过模板和虚函数实现

  D.实现运行时多态性的机制称为动态绑定

  34、 下列有关类成员的叙述中,正确的是( )。

  A.友元函数是类的成员函数

  B.类成员的默认访问权限是私有的

  C.类成员函数必须声明为公有的

  D.类的静态数据成员不能是常成员

  35、 有如下程序:

  #inClude

  using namespaCe std; ClaSS A{

  publiC:

  A(int i){x=i;}

  void dispa(  ){Cout< int x; };

  Class B:publiC A{ publiC:

  B(int i):A(i+10){x=i;}

  vold dispb(  ){dispa(  );Cout< int x; };

  int main(  )} B b(2); b.dispb(  );

  return 0; }

  执行这个程序的输出结果是(  )。

  A.10,2

  B.12,10

  C.12,2

  D.2,2

  36、 执行下列语句段后,输出字符“*”的个数是( )。

  for(int i=50;i>1;i一=2) tout<<’*’:

  A.24

  B.25

  C.26

  D.50

  37、 有如下类定义:

  Class AA{ int a: PubliC: AA(int n=O):a(n){}

  };

  Class BB:publiC AA{ publiC:

  BB(int n)

  };

  其中横线处的缺失部分是(  )。

  A.:a(n){}

  B.:AA(n){}

  C.{a(n);}

  D.{a=n;}

  38、 判断char型变量c是否为小写字母的正确表达式是( )。

  A.’a’<=c<=’z’

  B.(c>=A.&&(c<=z)

  C.(’a’>=C.||(’z’<=C.

  D.(c>=’a’)&&(c<=,z,)

  39、 决定c++语言中函数的返回值类型的是( )。

  A.return语句中的表达式类型

  B.调用该函数时系统随机产生的类型

  C.调用该函数时的主调用函数类型

  D.在定义该函数时所指定的数据类型

  40、 设int a=1,b=2;,则(a++)+b和a+++b这两个表达式的值分别为( )。

  A.3,3

  B.3,4

  C.4,3

  D.4,4

  二、基本操作题(18分)

  41、

  请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl。程序中位于每个“//ERROR****found料****之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:

  Name:Smith Age:21 ID:99999 CourseNum:12

  Record:970

  注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。

  #include

  using namespace std;

  class Studentlnfo

  {

  protected:

  //ERROR********************found****************

  char Name;

  int Age;

  int ID:

  int CourseNum;

  float Record;

  public:

  Studentlnfo(char*name,int Age,int ID,int coumeNum,float record);

  //ERROR ********************found********************

  void~Studentlnfo(){}

  float AverageRecord(){

  return Record/CourseNum;

  }

  void show()const{

  cout<<”Name:”< <<”CourseNum:”< }

  };

  //ERROR ******************found**************

  StudentInfo StudentInfo(char*Name,int Age,int ID,int CourseNum,float Record)

  {

  Name=name;

  Age=age;

  this一>ID=ID:

  CourseNum=courseNum:

  Record=record;

  }

  int main()

  {

  Studentlnfo st(’’Smith”,21,99999,12,970);

  st.show();

  return 0;

  }

  三、简单应用题(24分)

  42、

  请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了vehiele类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将Vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:

  80

  150

  100

  1

  注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。

  #include

  class vehicle

  {

  private:

  int MaxSpeed;

  int Weight;

  public:

  //*************found************

  vehicle(int maxspeed,int weight):

  ~vehicle(){};

  int getMaxSpeed(){return MaxSpeed;}

  int getWeight(){retum Weight;}

  };

  //****************found************

  class bicycle:public vehicle

  {

  private:

  int Height;

  public:

  bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),Height(height){}

  int getHeight(){retum Height;};

  };

  //*******************found**************

  class motorcar:public vehicle

  {

  private:

  int SeatNum;

  public:

  motorcar(int maxspeed。int weight,int seatnum):vehicle(maxspeed,weight),SeatNum(seatnum){}

  int getSeatNum(){return SeatNum;};

  };

  //*****************found***************

  class motorcycle:

  {

  public:

  motorcycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),bicycle(maxspeed,weight,

  height),motorcar(maxspeed,weight,1){}

  };

  void main()

  {

  motorcycle a(80,150,100);

  cout< cout< cout< cout< }

  四、综合应用题(18分)

  43、

  请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过l00。程序文件包括pmj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。

  屏幕上输出的正确结果应该是:

  Hello!

  Happy new year!

  补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。

  不得修改程序的其他部分。

  注意:

  程序最后调用writeToFil。函数,使用另一组不同的测试数据,将不同的运行结果输出到文件0ut?dat中。

  输出函数writeToFile已经编译为obj文件。

  //proj3.h

  #include

  #include

  using namespace std;

  class MiniString

  {

  pubhc:

  friend。8tream&operator<<(oatream&output,const MiniString&s)//重载流插入运算符

  { output< friend istream&operator>>(istream&input,MiniString&8)//重载流提取运算符

  { char temp[100];//用于输入的临时数组

  temp[0]=’’://初始为空字符串

  input>>setw(100)>>temp;

  int inLen=strlen(temp);//输入字符串长度

  if(inLen!=0)

  }

  s.1ength=inLen;//赋长度

  if(s.sPtr!=0)[]s.sPtr;//避免内存泄漏

  s.sPtr=Hew char[s.1ength+1];

  strcpy(s.sPtr,temp);//如果8不是空指针,则复制内容

  }

  else s.sPtr[0]=’’;//如果s是空指针,则为空字符串

  retum input;

  }

  void modString(const char}string2)//更改字符串内容

  {

  if(strin92 1=0)//如果strin92不是空指针,则复制内容

  {

  if(strlen(strin92)!=length)

  {

  length=strlen(strin92);

  []sPtr;

  sPtr=new char[1ength+1];//分配内存

  }

  strcpy(sPtr,strin92);

  }

  else sPtr[0]=’’;//如果string2是空指针,则为空字符串

  }

  MiniString&operator=f const MiniString&otherString);

  MiniString(corot char*s=""):lengtll((s!=0)?strlen(s):0)//构造函数

  {

  sPtT=0:

  if(1ength[=0)

  setString(S);

  }

  ~MiniString()//析构函数

  {[]sPtr;}

  private:

  int length;//字符串长度

  char*sPtr;//指向字符串起始位置

  void setString(const char*string2)//辅助函数

  {

  sPtr=Dew char[str|en(string2)+1];//分配内存

  if(stnIl92!=0)strcpy(sPtr,string2);//如果string2不是空指针,则复制内容

  else slur[0]=;//如果string2是空指针,则为空字符串

  }

  };

  //pwj3.cpp

  #include

  #include

  using namespace std;

  #include”proj3.h”

  MiniString&MiniStrin9:0perator=(const MiniString&otherString)

  {//重载赋值运算符函数。提示:可以调用辅助函数setString

  //*************333**********

  //*************666**********

  }

  int main()

  {

  MiniSuing strl(”Heuo!”),str2;

  void writeToFile(const char*);

  sir2=strl;//使用重载的赋值运算符

  str2.modString("Happy new year!");

  cout< cout< writeToFile("");

  return 0;

  }