面向对象程序设计习题及答案docx.docx
《面向对象程序设计习题及答案docx.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计习题及答案docx.docx(20页珍藏版)》请在冰豆网上搜索。
面向对象程序设计习题及答案docx
面向对象程序设计
一、选择填空
1.关于C++与C语言的关系描述中,(D)是错误的。
(A)C语言是C++的一个子集(B)C语言与C++是兼容的
(C)C++对C语言进行了一些改进(D)C++和C语言都是面向对象的
2.下面关于对象概念的描述中,(B)是错误的。
(A)对象就是C语言的结构变量(B)对象代表着正在创建的系统中的一个实体
(C)对象是一个状态的操作(或方法)的封装体
(D)对象之间的信息传递是通过消息进行的
3.下面关于类概念的描述中,(D)是错误的。
(A)类是抽象数据类型的实现(B)类是具有共同行为的若干对象的统一描述体
(C)类是创建对象的样板(D)类就是C语言的结构类型
4.按照标识符的要求,(A)符号不能组成标识符。
(A)连接符(B)下划线(C)大小写字母(D)数字字符
5.下列符号中,(C)不可作为分隔符。
(A),(B):
(C)?
(D);
6.在16位机中,int型字宽为(A)字节。
(A)2(B)4(C)6(D)8
7.类型修饰符UnSigned修饰(D)类型是错误的。
(A)char(B)int(C)longint(D)float
&对于int*pa[5];的描述,(D)是正确的。
(A)pa是一个指向数组的指针,所指向的数组是5个int型元素
(B)pa是一个指向某数组中第5个元素的指针,该元素是int变量
(C)pa[5]表示某个数组的第5个元素
(D)pa是一个具有5个元素的指针数组,每个元素是一个int型指针。
9.下列关于指针的运算中,(D)是非法的。
(A)两个指针在一定条件下,可以进行相等或不等的运算。
(B)可以有一个空指针赋值给某个指针。
(C)一个指针可以加上一个整数。
(D)两个指针在一定条件下,可以相加。
10.指针可以用来表示数组元素,下列表示中(A)是错误的。
已知:
inta[3][7];
(A)*(a+1)[5](B)*(*a+3)(C)*(*(a+1))(D)*(&a[0][0]+2)
11.下列表示引用的方法中,(A)是正确的。
已知:
m=10;
(A)int&x=m;(B)int&y=10;(C)int&z;(D)float&t=&m;
12.下列各运算符中,(A)可以作用于浮点数。
(A)++(B)%(C)>>(D)&
(与C语言不同,在C++中++和--运算符可以作用于浮点数)
13当一个函数无返回值时,定义它其函数类型应是(A)。
(A)void(B)任意(C)int(D)无
14.在函数说明时,下列(D)项是不必要的。
(A)函数的类型(B)函数的参数类型和名字
(C)函数名字(D)返回值表达式
15.下列的(D)是引用调用。
(A)形参是指针,实参是地址值(B)形参和实参都是变量
(C)形参是数组名,实参是数组名(D)形参是引用,实参是变量
16.在C++中,下列关于设置参数默认值的描述中,(B)是正确的。
(A)不允许设置参数的默认值
(B)设置参数默认值时,应按从右到左的顺序进行
(C)设置参数默认值时,应按从左到右的顺序进行
(D)设置参数默认值时,应该全部参数都设置
17.重载函数在调用时选择的依据中,(D)是错误的。
(A)参数个数(B)参数类型(C)函数名字(D)函数的返回值类型
18.在一个函数中,要求通过函数调用来实现一个不太复杂的功能,并且要求加快执行速度,选用(A)最合适。
(A)内联函数(B)重载函数(C)递归函数(D)嵌套调用
19.采用函数重载的目的在于(D)
(A)实现共享(B)减少空间(C)提高速度(D)使用方便,提高可读性
20.说明语句“constchar*ptr;中”,ptr应该是(C)。
(A)指向字符常量的指针(B)指向字符的常量指针
(C)指向字符串常量的指针(D)指向字符串的常量指针
21.在下列关键字中,用以说明类中公有成员的是(A)。
(A)public(B)private(C)protected(D)friend
22.下列的种类函数中,(C)不是类的成员函数。
(A)构造函数(B)析构函数(C)友元函数(D)拷贝构造函数
23.作用域运算符的功能是(D)。
(A)标识作用域的级别(B)指出作用域的范围
(C)给定作用域的大小(D)标识某个成员是属于哪个类
24.(B)是不可以作为该类的成员的。
(A)自身类对象的指针(B)自身类的对象
(C)自身类对象的引用(D)另一个类的对象
25.(D)不是构造函数的特点。
(A)构造函数的函数名与类名相同
(C)构造函数可以设置缺省参数
26.(A)是析构函数的特征。
(A)—个类中只能定义一个析构函数
(C)析构函数的定义只能在类体内
27.通常拷贝构造函数的参数是(C)。
(A)某个对象名
(C)某个对象的引用名
28.关于成员函数特征的下述描述中,
(A)成员函数一定是内联函数
(C)成员函数可以设置缺省参数
29.下述静态数据成员的特征中,
(B)构造函数可以重载
(D)构造必须指定类型说明
(B)析构函数名与类名不同
(D)析构函数可以有一个或多个参数
(B)某个对象的成员名
(D)某个对象的指针名
A)是错误的
(B)成员函数可以重载
(D)成员函数可以是静态的
D)是错误的。
static
(A)说明静态数据成员时前边要加修饰符
(B)静态数据成员要在类外进行初始化
(C)引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
(D)静态数据成员不是所有对象共有的
30.友元的作用是(A)
(A)提高程序的运行效率(B)加强类的封装性
(C)实现数据的隐藏(D)增加成员函数的种类
31.已知类A中一个成员函数说明如下:
voidSet(A&a);其中A&a的含义是(C)。
(A)指向类A的指针a(B)将a的地址赋给变量Set
(C)a是类A对象的引用,用来作函数Set()的形参
(D)变量A与a按位逻辑与,作为函数Set()的参数
32.下列关于对象数组的描述中,(D)是错误的。
(A)对象数组的下标是从O开始的(B)对象数组的数组名是一个常量指针
(C)对象数组的每个元素是同一个类的对象
(D)对象数组只能赋初值,而不能被赋值
{赋值格式:
对象数组名[行下标][列下标]=构造函数名(实参表);}
33.下列定义中,(B)是定义指向数组的指针P。
(A)int*p[5];(B)int(*p)[5];(C)(int*)p[5];(D)int*p[];
34.已知:
Print()函数是一个类的常(Const)成员函数,它无返回值,下列表示中,(A)是
正确的。
(A)voidPrint()Const;(B)ConstvoidPrint();
(C)voidConstPrint();(D)voidPrint(Const);
{this指针是一个常量指针,但也可以将它定义成指向常量的常量指针,其方法是在定义成员函数时,或者在类中声明成员函数时,在函数头后面加上关键字Const}
35.关于new运算符的下列描述中,(D)是错误的。
(A)它可以用来动态创建对象和对象数组
(B)使用它创建的对象或对象数组应使用运算符delete删除
(C)使用它创建对象时要调用构造函数
(D)使用它创建对象数组时必须指定初始值
{V类型>*指针变量名=newV类型>[元素个数];指针变量名[下标]=构造函数(参数表);
}
36.关于delete运算符的下列描述中,(C)是错误的。
(A)它必须用于new返回的指针(B)它也适用于空指针
(C)对同一个动态对象可以多次使用该运算符
(D)指针名前只用一对方括号符,不管所删除数组的维数
37.具有转换功能的构造函数,应该是(B)。
(A)不带参数的构造函数(B)带有一个参数的构造函数
(C)带有两个以参数的构造函数(D)缺省构造函数
38.下列对派生类的描述中,(D)是错误的。
(A)一个派生类可以作另一个派生类的基类
(B)派生类至少有一个基类
(C)派生类的成员除了它自己的成员外,还包含了其基类的成员
(D)派生类中从基类继承的成员,其访问权限保持不变
39.派生类对象对基类有成员中(A)是可以访问的。
(A)公有继承的公有成员(B)公有继承的私有成员
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
(C)公有继承的保护成员(D)私有继承的公有成员
对基类和派生类的描述中,(B)是错误的。
(A)派生类是基类的具体化(B)派生类是基类的子集
(C)派生类是基类定义的延续(D)派生类是基类的组合
(A)基类的构造函数
(B)派生类中成员对象的初始化
派生类构造函数的成员初始化列表中不能包含(C)。
(C)基类成员对象的初始化(D)派生类中一般数据成员的初始化
关于多继承二义性的描述中,(C)是错误的。
(A)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员进行访问可能出现二义性。
(B)解决二义性的最常用的方法是用“类名:
:
”指定成员名所属类。
(C)基类和派生类中出现的同名成员函数,也存在二义性问题。
(D)一个派生类是从两个基类派生而来,而这两个基类又有一个共同的基类,对该基类的成员进行访问时,也可能出现二义性。
设置虚基类的目的是(B)。
(A)简化程序(B)消除二义性(C)提高运行效率(D)减少目标代码
在派生类对基类继承的传递性中,(C)是错误的。
(A)在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访
问基类的私有数据成员。
(B)在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访
问基类的私有数据成员。
(C)在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访
问基类的私有数据成员。
(D)不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域内都是不可
见的。
对定义重载函数的下列要求中,(D)是错误的。
(A)要求参数的个数不同(B)要求参数中至少有一个类型不同
(C)要求参数个数相同,参数类型不同(D)要求函数的返回值不同
下列函数中,(C)不能重载。
(A)成员函数(B)非成员函数(C)析构函数(D)构造函数
下列对重载函数的描述中,(A)是错误的。
(A)重载函数中不允许使用缺省参数
(B)重载函数中编译系统根据参数表进行选择
(C)不要使用重载函数来描述毫不相干的函数
(D)构造函数重载将给初始化带来多种方式下列运算符中,(C)不能重载。
A)&&(B)[](C):
:
(D)new
下列关于运算符重载的描述中,(D)是正确的。
(A)运算符重载可以改变运算量的个数
(B)运算符重载可以改变优先级
(C)运算符重载可以改变结合性
D)运算符重载不可以改变语法结构运算符可以重载为(A)或(B)。
(A)成员函数(B)友元函数(C)内联函数(D)带缺省参数的函数
51.关于动态联编的下列描述中,(D)是错误的。
(A)动态联编是以虚函数为基础的
(B)动态联编是在程序运行时确定所调用的函数代码块
(C)动态联编调用多态函数时传递给它的是基类对象的指针或基类对象的引用
(D)动态联编是在编译时确定调用某个函数的
52.关于虚函数的描述中,(C)是正确的。
(A)虚函数是一个StatiC类型的成员函数
(B)虚函数是一个非成员函数
(C)基类中说明了虚函数后,其派生类中的对应函数可不必重新再说明
(D)基类中的虚函数和其派生类中的虚函数具有不同的参数个数和类型
53.用虚函数只有在(B)和(D)时才能实现多态性。
(A)基类和派生类具有同名虚函数,而它们的参数个数不同
(B)用基类的指针或基类的引用来访问虚函数
(C)基类和派生类具有同名虚函数,而它们的参数至少有一个类型不同
(D)基类和派生类具有函数原型完全相同的同名虚函数,而函数体内的执行代码不同
54.关于纯虚函数和抽象类的描述中,(C)是错误的。
(A)纯虚函数是一种特殊的虚函数,它没有具体的实现部分
(B)抽象类是指具有纯虚函数的类
(C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
(D)抽象类只能作为基类使用,其纯虚函数的实现部分由派生类给出
55.下列描述中,(D)是抽象类的特性。
(A)可以说明虚函数(B)可以进行构造函数重载
(C)可以定义友元函数(D)不能说明其对象
56.进行文件操作时需要包含(B)文件。
(A)ioStream.h(B)fStream.h(C)Stdio.h(D)Stdlib.h
57.已知:
inta,*pa=&a;输出指针Pa的地址值(十进制)的方法是(D)。
(A)Cout<58.下列输出字符?
A?
的方法中,(A)是错误的。
(A)Cout<);(B)Cout<
A?
;(C)Cout.put(,A?
);(D)CharA=?
A?
;Cout<59.关于getline()函数的下列描述中,(D)是错误的。
(A)该函数是用来从键盘上读取字符串的
(B)该函数读取的字符串长度是受限制的
(C)该函数读取字符串时遇到终止符就停止
(D)该函数中所使用的终止符只能是换行符
60.关于read()函数的下列描述中,(D)是对的。
(A)该函数只能从键盘中读取字符串
(B)该函数读取的字符串长度是不受限制的
(C)该函数只能用于文本文件的操作
(D)该函数只能按规定读取所指定的字符数
61.ios类提供控制格式标志位中,(A)是指定转换十六进制形式的标志位。
(D)left
(C)是以追加方式打开文件。
(D)ate
(A)hex(B)oCt(C)deC
62.磁盘文件操作中,打开磁盘文件的访问方式中,
(A)in(B)out(C)app
63.下列函数中,(D)是对文件进行写操作。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
C++中使用了新的注释符’
//',C语言中注释符为‘
/*…*/'不能在C++中使用。
(F)
、判断下列描述的正确性
C++程序中,每条语句结束时都加一个分号“;”。
(T)
C++中标识符内的大小写字母是没有区别的。
(F)
否则将会降低其可读性。
(T)
在编写C++程序时,一定要注意采用人们习惯使用的书写格式,
C++是一种以编译方式实现的咼级语言。
(T)
在C++编译过程中,包含预处理过程、编译过程和连接过程,并且这三个过程的顺序是不能改变的。
(T)
预处理过程一般在编译过程之后连接过程之前进行。
(F)
源程序在编译过程中可能会出现一些错误信息,但在连接过程中将不会出现错误信息。
(F)
C++的程序中,对变量一定要先说明再使用,说明只要在使用之前就可以。
(T)
数组赋初值时,初值表中的数据项的数目可以大于或等于数组元素的个数。
(F)
指针是用来存放某种变量的地址的变量。
这种变量的地址也可以存放在某个变量中,存放某个指针的地址值的变量称为指向指针的指针,即二级指针。
(T)
引用是某个变量的别名,对引用的操作,实质上就是对被引用的变量的操作。
(T)
在说明语句inta(5),&b=a,*p=&a;中,b的值和*p的值是相等的。
(T)
已知:
inta(5);表达式(a=7)+a具有二义性。
(F)
移位运算符在移位操作中,无论左移还是右移,所移出的空位一律补0。
(F)
某个变量的类型咼是指该变量被存放在内存中的咼地址处。
(F)
隐含的类型转换都是使数据的精度不会降低,而显式的类型转换是不安全的转换。
F)
类型定义是用来定义一些C++中所没有的新类型。
(F)
在C++中,定义函数时必须给出函数的类型。
(T)
在C++中,说明函数时要用函数原型,即定义函数时的函数头部分。
(T)
在C++中,所有的函数在调用前都要说明。
(T)
在C++中,传址调用将被引用调用所替代。
(T)
使用内联函数是以牺牲增大空间开销为代价的。
(T)
返回值类型、参数个数和类型都相同的函数也可以重载。
(F)
在设置了参数默认值后,调用函数的对应实参就必须省略。
(F)
for循环中,循环变量的作用域是该循环的循环体内。
(F)
函数形参的作用域是该函数的函数体。
(T)
调用系统函数时,要先将系统函数的原型说明所在的头文件包含进去。
(T)
使用关键字class定义的类中缺省的访问权限是私有(PriVate)的。
(T)
作用域运算符‘:
:
'只能用来限定成员函数所属的类。
(F)
析构函数是一种函数体为空的成员函数。
(F)
构造函数和析构函数都不能重载。
(F)
说明或定义对象时,类名前面不需要加class关键字。
(T)
.'或‘->'。
(T)
访问对象的成员与访问结构变量的成员相同,使用运算符‘
所谓私有成员是指只有类中所提供的成员函数才能直接访问它们,任何类以外的函数
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
对它们的访问都是非法的。
(F)
某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。
(T)
可以在类的构造函数中对静态数据成员进行初始化。
(F)
如果一个成员函数只需要存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。
(T)
指向对象的指针与对象都可以作函数参数,但是使用前者比后者好些。
(T)
对象引用作函数参数比用对象指针更方便。
(T)
对象数组的元素可以是不同类的对象。
(F)
对象数组既可以在定义它的同时赋初值,又可以在以后赋值。
(T)
指向对象数组的指针不一定必须指向数组的首元素。
(T)
“constchar*p;”语句说明了p是指向字符串的常量指针。
(F)
一个类的构造函数中可以不包含对其成员对象的初始化。
(F)
C++语言中,既允许单继承,又允许多继承。
(T)
派生类是从基类派生出来的,它不能再生成新的派生类。
(F)
派生类的继承方式有两种:
公有继承和私有继承。
(F)
F)
在公有继承中,基类中的公有成员和私有成员在派生类作用域内都是可见的。
在公有继承中,派生类对象可以访问基类的公有成员。
(T)
在私有成员中,派生类对象可以访问基类的公有成员。
(F)
在私有继承中,基类中所有成员对派生类的对象都是不可见的。
(T)
公有派生类的对象是可以访问基类的公有成员的。
(T)
公有派生类的对象是可以访问基类的私有成员的。
(F)
公有派生类的对象是可以访问基类的保护成员的。
(F)
私有派生类的对象是可以访问基类的公有成员的。
(F)
派生类是它基类的组合。
(F)
构造函数可以被继承。
(F)
析构函数不能被继承。
(T)
只要是类M继承了类N,就可以说类M是类N的子类型。
(F)
如果A类型是B类型的子类型,则A类型必然适应于B类型。
(T)多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。
(T)
单继承情况,派生类中对基类成员的访问也会出现二义性。
(F)
虚基类是用来解决多继承中公共基类在派生类中只产生一个基类成员对象的问题。
(T)函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。
(T)
重载函数可以带有缺省值参数,但是要注意二义性。
(T)
T)
多数运算符可以重载,个别运算符不能重载,运算符重载是通过函数定义实现的。
对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数。
(F)对单目运算符重载为友元函数,应说明一个形参。
重载为成员函数时,不能显式说明形参。
(T)
重载运算符保持原运算符的优先级和结合性不变。
(T)
虚函数是用virtual关键字说明的成员函数。
(T)
构造函数说明为纯虚函数是没有意义的。
(T)
抽象类是指没有定义函数体的基类虚函数。
(F)
动态联编是在运行时选定调用的成员函数。
(T)
使用输出运算符‘<<'可以输出各种类型的变量的值,也可以输出指针值。
(T)预定义的插入符从键盘上接收数据是不带缓冲区的。
(F)
预定义的提取符和插入符是可以重载的。
(T)
get()函数不能从流中读取终止字符,终止字符仍留在流中。
getline()函数从流中读取
终止字符,但终止字符被丢弃。
(T)
使用打开文件函数open()之前,需要定义一个流类对象,使用open()函数来操作该对象。
(F)
使用关闭文件函数close()关闭一个文件时,但流对象仍存在。
(T)
以app方式打开文件时,当前的读指针和写指针都定位于文件尾。
(T)
打开ASCII码流文件和二进制文件时,打开方式是相同的。
(F)
read()和write()函数可以读写文本文件,也可以读写二进制文件。
(T)
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
seekg()函数和seekp()函数分别用来定位gptr指针和pptr指针的。
(T)