C++考试题库及答案.docx
《C++考试题库及答案.docx》由会员分享,可在线阅读,更多相关《C++考试题库及答案.docx(16页珍藏版)》请在冰点文库上搜索。
C++考试题库及答案
下列不具有访问权限属性的是()(2.5分)
A、
数据成员
B、
函数成员
C、
类成员
D、
非类成员
在下列成对的表达式中,运算结果类型相同的一对是()(2.5分)
A、
7.0/2和7/2
B、
7.0/2.0和7.0/2
C、
8/2和6.0/2.0
D、
5/2.0和5/2
设有定义inti;doublej=5;,则10+i+j值的数据类型是()(2.5分)
A、
float
B、
int
C、
double
D、
不确定
在inta=3,int*p=&a;中,*p的值是()(2.5分)
A、
变量p的地址值
B、
3
C、
变量a的地址值
D、
无意义
已知f1和f2是同一类的两个成员函数,但f1不能直接调用f2,这说明()(2.5分)
A、
f1是静态函数,f2不是静态函数
B、
f1不是静态函数,f2是静态函数
C、
f1和f2都是静态函数
D、
f1和f2都不是静态函数
普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,这与普通函数与常成员函数相同。
因此选择A项。
下面有关类说法不正确的是()(2.5分)
A、
析构函数需要指定参数
B、
一个类只有一个析构函数
C、
在一个类中可以说明具有类类型的数据成员
D、
一个类可以有多个构造函数
//构造函数可以有参数、可以重载、因此可以有多个,A项正确。
析构函数只能有一个
所有在函数中定义的变量,都是()(2.5分)
A、
静态变量
B、
全局变量
C、
局部变量
D、
寄存器变量
下面对静态数据成员的描述中,正确的是()(2.5分)
A、
静态数据成员不能用private控制符修饰
B、
静态数据成员不可以被类的对象调用
C、
静态数据成员可以直接用类名或者对象名来调用
D、
静态数据成员可以在类体内进行初始化
[解析]对于选项A,C++规定对静态数据成员的初始化应该在类体外进行初始化。
所以选项A是错误的。
对于B选项,C++规定静态数据成员可由任意访问权限许可的函数或对象访问,所以选项B是错误的。
对于选项C,在C++中,静态数据成员也可以定义为私有的静态数据成员,所以选项C的描述是错误的。
对于选项D,在C++中,静态数据成员是类的所有对象共享的成员,即可以通过类名访问,也可以通过对象访问。
但通过类名访问更方便、更高效。
所以选项D的描述是正确的
关于对象概念的描述中,说法错误的是()(2.5分)
A、
对象是类的一个变量
B、
对象之间的信息传递是通过消息进行的
C、
对象就是C语言中的结构变量
D、
对象代表着正在创建的系统中的一个实体
[解析]C++中的对象与C语言中的结构变量是不一样的。
对象是某一类类型的变量,而结构变量是结构类型的变量。
同时C++对C的结构有了扩展,结构可以和类一样使用。
①结构除了可以包含数据成员外,还可以包含成员函数;②成员也可以加上public、private和protected访问控制;③结构之间也可以继承。
两者惟一的不同之处是,结构中的成员默认是公有的,结构的继承默认是公有的,而类的继承默认是私有的,类的成员默认也是私有的。
类的构造函数被自动调用执行的情况是在定义该类的()(2.5分)
A、
对象时
B、
成员函数时
C、
数据成员时
D、
友元函数时
下列有关重载函数的说法中正确的是()(2.5分)
A、
重载函数必须有不同的形参列表
B、
重载函数参数个数必须相同
C、
重载函数必须具有不同的返回值类型
D、
重载函数名可以不同
使用地址作为实参传给形参,下列说法正确的是()
(2.5分)
A、形参是实参的备份
B、实参是形参的备份
C、实参与形参指向的是同一对象
D、实参与形参无联系
//地址作为实参,表示实参与形参代表同一个对象。
如果实参是数值,形参也是普通变量,此时形参是实参的备份。
所以选择D项
静态成员函数没有()(2.5分)
A、
指针参数
B、
返回类型
C、
this指针
D、
返回值
假定一个类的构造函数为“A(inti=4,intj=0){a=i;b=j;}”,则执行“Ax
(1);”语句后,x.a和x.b的值分别为()(2.5分)
A、
4和0
B、
1和4
C、
4和1
D、
1和0
x
(1)中的1匹配第一个参数,所以,a=1,b=0
在C++中,函数原型不能标识()(2.5分)
A、
函数参数类型
B、
函数参数的个数
C、
函数的功能
D、
函数的返回类型
所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是()(2.5分)
A、
函数体
B、
对象
C、
类
D、
数据块
类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
假定AB为一个类,则执行“ABa
(2),b[3],*p[4];”语句时调用该类构造函数的次数为()(2.5分)
A、
5
B、
3
C、
4
D、
9
//4次,因为有4个对象被构建。
a(4)是一个,b[3]是三个,至于*p[2]这个是指针数组,只是包含两个指针,不会调用AB类的构造函数
假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()(2.5分)
A、
x->a
B、
x.a()
C、
x.a
D、
(*x).a()
对基类和派生类的关系描述中,错误的是()(2.5分)
A、
派生类是基类定义的延续
B、
基类继承了派生类的属性
C、
派生类是基类的特殊化
D、
派生类是基类的具体化
已知:
p是一个指向类A数据成员m的指针,A1是类A的一个对象。
如果要给m赋值为5,正确的是()(2.5分)
A、
A1.*p=5;
B、
*A1.p=5;
C、
A1.p=5;
D、
A1->p=5;
[解析]*A1.p=5;//.比*优先级高,相当于*(A1.p)=5
在函数定义中的形参属于()(2.5分)
A、
静态变量
B、
寄存器变量
C、
全局变量
D、
局部变量
//所有在函数中定义的变量,连同形式参数,都属于局部变量
适宜采用inline定义函数情况是()(2.5分)
A、
函数代码少、频繁调用
B、
函数体含有循环语句
C、
函数体含有递归语句
D、
函数代码多、不常调用
在main函数中可以用p.a的形式访问派生类对象p的基类成员a,其中a是()(2.5分)
A、
公有继承的保护成员
B、
私有继承的公有成员
C、
公有继承的公有成员
D、
公有继承的私有成员
下列不能作为类的成员的是()(2.5分)
A、
自身类对象的引用
B、
自身类对象
C、
自身类对象的指针
D、
另一个类的对象
假设inta=1,b=2;则表达式(++a/b)*b--的值为___。
(2.5分)
A、
4
B、
2
C、
5
D、
1
假定一个类的构造函数为A(intaa,intbb){a=aa--;b=a*bb;},则执行Ax(4,5);语句后,x.a和x.b的值分别为()(2.5分)
A、
4和20
B、
20和5
C、
3和15
D、
5和4
如果从原有类定义新类可以实现的是()(2.5分)
A、
继承机制
B、
信息隐藏
C、
数据封装
D、
数据抽象
解决定义二义性问题的方法有()(2.5分)
A、
使用作用域分辨运算符或虚基类
B、
使用作用域分辨运算符或成员名限定
C、
只能使用作用域分辨运算符
D、
使用成员名限定或赋值兼容规则
假设inta=1,b=2;则表达式(++a/b)*b--的值为___。
(2.5分)
A、
4
B、
5
C、
1
D、
2
//单目运算符++(只对一个变量a进行陨石)的优先级高于双目运算符/、*(对运算符两边的两个对象进行运算)
//而b--表示先把整个式子算完,再把b的值减一,也就是说式子等于2之后,b=b-1,b变为1;
若Sample类中的一个成员函数说明如下:
voidset(Sample&a),则Sample&a的含义是()(2.5分)
A、
将a的地址赋给变量Set
B、
指向类Sample的名为a的指针
C、
a是类Sample的对象引用,用来作函数Set()的形参
D、
变量Sample与a按位与的结果作为函数Set的参数
———————————————————————————————————————
1.若要实例化一个含有引用型数据成员的类,那么只能使用构造函数初始化列表来初始化该数据成员。
y
2.C++中,如果条件表达式值为-1,则表示逻辑为假。
x
3.在C++中,也可使用struct来声明类,但在该类中不能声明成员函数。
x
4.可以在类的构造函数中对静态数据成员进行初始化.x
5.在声明一个类时,必须同时声明类的数据成员和成员函数。
X
6.每个对象也有地址,该地址就是存储此对象数据成员的单元的首地址。
y
7.在传值调用中,要求实参和形参的类型完全一致并且个数相等。
y
8.引入内联函数的主要目的是缩短程序代码,让程序少占用内存空间。
X
//是为了既可以保证程序的可读性,又能提高程序的运行效率
9.break语句也可以用于if体内,它可退出if语句x
//退出的是for或switch语句
10.析构函数是一种函数体为空的成员函数.x
11.重载函数必须有不同的参数列表。
Y
12.析构函数不能被继承y
13.如果在一个类的对象之间要进行数据交换,可以使用该类的静态数据成员来完成y
14.如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。
x
拷贝构造函数用于用类的一个对象去初始化该类的另一个对象时使用,也可已用于当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用y
//拷贝构造函数用于哪三个方面?
答:
(1)用类的一个对象去初始化该类的另一个对象时使用。
(2)当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。
(3)当函数的返回值是类对象,函数执行结束返回调用者时使用。
15.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的.y
16.构造函数不具备的特征是构造函数需指定类型说明。
Y
17.类中的静态成员数据为该类的所有对象所共享,并且,在该类对象被撤销时,静态成员并没有撤销。
Y
18.在c++语言中,也可以使用struct(结构体)来定义一个类y
19.在C++语言中,使用struct(结构体)定义的类与使用class定义的类是一样的x
20.设函数fun()是一个不属于任何类的普通函数,则在调用该函数时只能用fun()方式,而不能用:
:
fun()方式来调用。
x
21.设Time是一个类,现有指针p的定义语句:
constTime*p;则通过指针p不可以修改Time类对象的公有数据成员。
y
22.引用和指针都可作函数参数。
Y
23.使用关键字class定义的类中默认的访问权限是私有(private)的.y
24.作用域运算符(:
:
)只能用来限定成员函数所属的类X
25.在传值调用中,要求实参和形参的类型完全一致并且个数相等。
X
26.对象是一个状态和操作(或方法)的封装体Y
类的静态数据成员需要在定义每个类的对象时进行初始化x
27.析构函数的作用是当对象不用时,删除对象。
X
28.类中所提供的成员函数可以直接访问私有成员。
Y
29.char*constp表明p是一个指针,它只能指向一个字符串常量x
//char*constp,这个const是修饰p的,表明p是个只读的指针。
p指向字符串,并没要求一定是字符串常量。
//此外,如果是constchar*p,那么const是修饰p所指向的内容,表明p指向的内容是只读的,(注意只读与常量的区别),此时并也不能说p指向字符串常量。
//如果是constchar*constp;那么不仅p指向的内容是只读的,p本身也是只读的。
30.对象成员的表示与结构变量成员的表示相同,使用运算符.或->.(y)
31.