一、选择题(每小题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”;delete 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
}
执行这个程序的输出结果是( )。
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.N—s图
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]=’\0’://初始为空字符串
input>>setw(100)>>temp;
int inLen=strlen(temp);//输入字符串长度
if(inLen!=0)
}
s.1ength=inLen;//赋长度
if(s.sPtr!=0)delete[]s.sPtr;//避免内存泄漏
s.sPtr=Hew char[s.1ength+1];
strcpy(s.sPtr,temp);//如果8不是空指针,则复制内容
}
else s.sPtr[0]=’\0’;//如果s是空指针,则为空字符串
retum input;
}
void modString(const char}string2)//更改字符串内容
{
if(strin92 1=0)//如果strin92不是空指针,则复制内容
{
if(strlen(strin92)!=length)
{
length=strlen(strin92);
delete[]sPtr;
sPtr=new char[1ength+1];//分配内存
}
strcpy(sPtr,strin92);
}
else sPtr[0]=’\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()//析构函数
{delete[]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]='\0';//如果string2是空指针,则为空字符串
}
};
//pwj3.cpp
#'include
#include
using namespace std;
#include”proj3.h”
MiniString&MiniStrin9::0perator=(const MiniString&otherString)
{//重载赋值运算符函数。提示:可以调用辅助函数setString
//*************333**********
//*************666**********
}
int main()
{
MiniSu'ing strl(”Heuo!”),str2;
void writeToFile(const char*);
sir2=strl;//使用重载的赋值运算符
str2.modString("Happy new year!");
cout< cout< writeToFile("");
return 0;
}
正在阅读:
2016年计算机二级《C++》上机考前冲刺试题(5)05-04
苏轼《雨中花慢·邃院重帘何处》诗词赏析07-21
你我走过的日子作文800字01-03
写父亲节礼物的作文范文07-22
经济师考试试题《中级商业》每日一练:经验判断法4.1911-24
志愿者申请表个人简历,志愿者个人简历3篇09-15
2020年河南濮阳市中级会计职称报名工作圆满结束2744人报名12-21
德国留学专业中的“受限专业”是什么07-29
春节的传说故事:春节的传说故事04-01