A)0 B)100
C)200 D)300
26.下列关于break语句的叙述不正确的是。
A)break语句可用于循环体中,它将使执行流程跳出本层循环体;
break语句可用于switch语句中,它将使执行流程跳出当前的switch语句;
break语句可用于if语句中,它将使执行流程跳出当前if语句;
break语句在一层循环体中可以出现多次。
27.下面关于类的对象性质的描述,正确的是。
A)对象之间不可以相互赋值B)不可以说明指向对象的指针
C)对象不能用作数组元素D)一个对象能用作另一个对象的成员
28.在C++中实现封装是借助于。
A)枚举 B)类
C)数组 D)函数
29.下列不是描述类的成员函数的是。
A)构造函数B)析构函数
C)友元函数D)拷贝构造函数
30.不能作为函数重载判断依据的是。
A)参数个数 B)参数类型
C)函数名称 D)返回值类型
31.假定一个类的构造函数为A(intaa,intbb){a=aa++;b=a*bb++;},则执行
AX(4,5);语句后,X.a和X.b的值分别为。
A)4和5 B)5和30
C)4和20 D)20和5
32.对于double(*p)[10];的描述,是正确的。
A)p是一个指向数组的指针,所指向的数组是10个double型元素;
B)p是一个指向某个数组中第10个元素的指针,该元素是double型变量;
C)p[5]表示某个数组的第10个元素的值;
D)p是一个具有10个元素的指针数组,每个元素是一个double型指针;
33.下面的函数声明中,哪一个是”voidBC(inta,intb);”的重载函数?
A)int BC(inta,intb) B)voidBC(inta,charb)
C)floatBC(inta,intb,intc=0) D)voidBC(inta,intb=0)
34.已知charc;char*constpc="asdf", 是正确的。
A)pc="dfgh"B)*pc=‘b’
C)*pc++=‘y’D)pc=&c
35.下列关于构造函数的叙述,错误的是。
A)构造函数可以设置默认参数;
B)构造函数在说明类变量时自动调用;
C)构造函数可以对静态数据成员进行初始化;
D)构造函数可以重载;
36.下列关于构造函数的描述中错误的是()
A)构造函数可以设置默认参数B)构造函数在定义类对象时自动执行
C)构造函数可以对静态数据成员进行初始化D)构造函数不可以重载
37.类的析构函数的作用是()。
A)作为类的一般成员函数B)类的初始化C)对象的初始化D)对象的删除
38.以下关于静态数据成员的描述正确的是()。
A)静态数据成员可以在类体中进行初始化B)静态数据成员不可以被类的实例调用
C)静态数据成员不能受protected控制符的作用D)静态数据成员可以直接用类名调用
39.下面关于友元函数的描述中正确的是()。
A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函数
C)友元函数破坏了类的封装性和隐藏性C)友元函数不能访问类的私有成员
40.下面关于友元函数的描述中错误的是()。
A)如果类A是类B的友元,那么类B也是类A的友元
B)如果函数fun()被说明为类A的友元,那么在fun()中可以访问类A的私有成员
C)友元关系不能被继承
D)如果类A是类B的友元,那么类A的所有成员函数都是类B的友元函数
41.重载函数在调用时选择的依据中,错误的是( )
A.函数的参数B.参数的类型C.函数的名字D.函数的类型
42.一个函数功能不太复杂,但要求被频繁调用,选用( .)
A.内联函数B.重载函数C.递归函数D.嵌套函数
43.下列不是描述类的成员函数的是( )
A.构造函数B.析构函数C.友元函数D.拷贝构造函数
44.构造函数不具备的特征的是( )
A.构造函数的函数名与类名相同B.构造函数可以重载
C.构造函数可以设置默认参数D.构造函数可以指定返回类型
45.通常,拷贝构造函数的参数是( )
A.某个对象名B.某个对象的成员名
C.某个对象的引用名D.某个对象的指针名
46.继承机制的作用是( )
A.信息隐藏B.数据封装C.代码重用D.数据抽象
47.类的析构函数的作用是( )
A.一般成员函数B.类的初始化C.对象的初始化D.删除对象创建的所有对象
48.类的析构函数是在( )调用的。
A.类创建时B.创建对象时C.删除对象时D.不自动调用
49.已知print()函数是一个类无返回值的常成员函数,下列表示中正确的是()。
A.voidprint()constB.constvoidprint()
C.voidconstprint;D.voidprint(const);
50.如果类A被说明成类B的友元,则()
A.类A的成员即类B的成员B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元
51.通过一个对象调用虚函数时,C++系统对该调用采用()。
A.动态联编B.静态联编C.不确定是哪种联编D.函数重载
52.在公有继承的情况下,基类成员在派生类中的访问权限()
A.受限制B.保持不变C.受保护D.不受保护
53.在C++中,当一个对象被创建后,它的每一个成员函数都含有一个系统自动生成的隐含的指针,称之为()指针。
A.对象B.派生C基类D.this
54.假定AB为一个类,则执行ABx;语句时将自动调用该类的()
A.有参构造函数B.无参构造函数
C.拷贝构造函数D.赋值构造函数
55.C++语言建立类族是通过()
A.类的嵌套B.类的继承C.虚函数D.抽象类
二、判断题
1、C++中,数组下标从1开始。
(错)
2、C++允许对字符串进行整体操作。
()
3、break语句也可以用于if体内,它可退出if语句。
( )
4、在说明语句chara(‘A’),&b=a,*pa=&a;中,b的值与*pa的值相等。
()
5、对象数组的元素可以是不同类的对象。
( )
6、私有继承中,基类中所有成员对派生类的对象都是不可见的。
( )
7、类中所提供的成员函数可以直接访问私有成员。
( )
8、按照标识符的要求,下划线是不能组成正确标识符的。
( )
9、函数的默认参数没有顺序要求,可以随意定义。
()
10、在C++语言中,”A”占两个字节,而’A’占一个字节。
()
11、C++语言支持封装性和继承性,不支持多态性。
[错]
12、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。
)[]
13、字符串"sdfgh"的长度是5。
[]
14、引用和指针都可作函数参数。
[]
15、友元函数说明在类体内,它是一种成员函数。
[]
16、友元类必须被说明为公有成员。
[]
17、纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。
[]
18、析构函数不能被继承。
[]
19、运算符重载以后,其优先级和结合性都不能改变。
[]
20、在C++中,函数名实际上是一个指针,它指向函数的入口。
[]
21、构造函数可以被继承。
( )
22、析构函数不能被继承。
( )
23、多继承情况下,派生类的构造函数的执行顺序取决于定义派生时所指定的各基类的顺序。
( )
24、解决多继承情况下出现的二义性的方法之一是使用成员名限定法。
( )
25、函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。
( )
26、多数运算符可以重载,个别运算符不能重载,运算符重载是通过函数定义实现的。
( )
27、对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数,还可以重载为非成员函数。
( )
28、对单目运算符重载为友元函数时,说明一个形参;重载为成员函数时,不能显式说明形参。
( )
29、重载运算符保持原运算符的优先级和结合性不变。
( )
30、构造函数说明为纯虚函数是没有意义的。
( )
三、简答题
1.简述C++的异常处理机制?
2.C++的预定义的流对象有哪些?
3.试以客观世界为例,说明抽象、封装、继承性和多态性等概念。
4.多继承的情况下为什么会产生二义性?
如何消除二义性?
5.试说明voidF(constT&t);和inff()const;中关键字const作用。
6.有如下程序
#include
#include
usingnamespacestd;
classB;
classA{
friendB;
public:
A(){
cout<<"inA()"<}
A(constA&a){
cout<<"inA(constA&a)<}
~A(){
cout<<"In~A()"<}
};
classB:
publicA{
public:
B(){
cout<<"InB()"<}
B(constAa){
cout<<"InB(constAa)"<}
};
voidf(A&a){
cout<<"Inf(A&a)"<}
voidff(constB&b){
cout<<"Inff(B&b)"<}
voidff(Aa){}
intmain()
{
Aa;
Bbb=a;
}
程序运行的结果是_________________________
7.有如下程序
#include
usingnamespacestd;
template
classHisClass
{
Typedata;
public:
HisClass(Typea,Typeb,Typec);
TypegetData();
};
template
HisClass:
:
HisClass(Typea,Typeb,Typec){
if(a>b&&a>c)
data=a;
else
if(b>c)
data=b;
else
data=c;
}
template
TypeHisClass:
:
getData()
{
returndata;
}
intmain()
{
HisClassx1(3,4,5),x2(5,3,4),
x3(4,5,3),x4(7,8,9),
x5(8,7,9);
cout<<system("pause");
return0;
}
程序运行的结果是_________________________
8.以下程序在运行中出现致命错误,找出错误原因并修正。
#include
#include
classsample{
private:
char*string;
public:
sample(constchar*s){
string=newchar[strlen(s)+1];
strcpy(strings);
}
~sample(){
deletestring;
};
};
samplef(char*arg){
sampletmp(arg);
returntmp;
}
intmain()
{
samplelocal=f("abcd");
return0;
}
9.有如下程序
#include
usingnamespacestd;
classP
{
char*name;
intage;
char*add;
public:
P(){
cout<<"P";
}
~P(){
cout<<"!
P";
}
};
classS:
publicP
{
char*department;
intlevel;
public:
S(){
cout<<"S";
}
~S(){
cout<<"!
S";
}
};
classT:
publicP
{
char*major;
floats;
public:
T(){
cout<<"T";
}
~T(){
cout<<"!
T";
}
};
intmain()
{
Ss;
Tt;
system("pause");
return0;
}
程序运行的结果是_________________________
10.有如下程序
#include
usingnamespacestd;
classB{
public:
B(){
cout<<"B:
:
B()"<}
virtualvoidf()=0;
virtualvoidg()=0;
voidk(){
f();
cout<<"B:
:
k()"<}
virtual~B(){
cout<<"B:
:
~B()"<num--;
}
staticintgetNum(){
returnnum;
}
private:
staticintnum;
};
classD1:
publicB{
public:
D1(){
cout<<"D1:
:
D1()"<}
voidf(){
cout<<"D1:
:
f()"<}
voidg(){
cout<<"D1:
:
g()"<}
~D1(){
cout<<"D1:
:
~D1()"<}
};
classD2:
publicB{
public:
D2(){
cout<<"D2:
:
D2()"<}
voidf(){
cout<<"D2:
:
f()"<}
voidg(){
cout<<"D2:
:
g()"<}
~D2(){
cout<<"D2:
:
~D2()"<}
};
intB:
:
num=0;
intmain()
{
B*buf[3];
buf[0]=newD1;
buf[1]=newD2;
buf[2]=newD1;
int