面向对象程序性设计试题及答案.docx
- 文档编号:6434412
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:59
- 大小:50.62KB
面向对象程序性设计试题及答案.docx
《面向对象程序性设计试题及答案.docx》由会员分享,可在线阅读,更多相关《面向对象程序性设计试题及答案.docx(59页珍藏版)》请在冰豆网上搜索。
面向对象程序性设计试题及答案
面向对象程序性设计试题及答案
一.选择填空
1.下面关于对象概念的描述中,(A)是错误的。
A.对象就是C语言中的结构变量;
B.对象代表着正在创建的系统中的一个实体;
C.对象是一个状态和操作(或方法)的封装体;
D.对象之间的信息传递是通过消息进行的
2.下面关于类概念的描述中,(D)是错误的。
A.类是抽象数据类型的实现:
B.类是具有共同行为的若干对象的统一描述体;
C.类是创建对象的样板:
D.类就是C语言中的结构类型
3.在16位机中,int型字宽为(A)字节。
A.2;B.4;C.6;D.8
4.类型修饰符unsigned修饰(D)类型是错误的。
A.char;B.int;C.longint;D.float
5.在inta[5]={1,3,5};中,数组元素a[1]的值是(C)。
A.1;B.0;C.3;D.2
6.在intb[][3]={{1},{3,2},{4,5,6},{0}};中b[2][2]的值是(C)。
A.0;B.5;C.6;D.2
7.下列表达式中,(C)是非法的。
已知:
inta=5;floatb=5.5;
A.a%3+b;B.b*b&&++a;C.(.a>b)+(int(b)%2);D.―――a+b
8.下列表达式中,(D)是合法的。
已知:
doublem=3.2;intn=3;
A.m<<2;B.(m+n)|n;C.!
m*=n;D.m=5,n=3.1,m+n
9.下列for循环的次数为(B)。
for(inti=0,x=0;!
x&&i<=5;i++)
A.5;B.6;C.1;D.无限
10.下列while循环的次数是(A)。
while(inti=0)i――;
A.0;B.1;C.5;D.无限
11.下述关于break语句的描述中,(C)是不正确的。
A.break语句可用于循环体内,它将退出该重循环;
B.break语句可用于开关语句中,它将退出开关语句;
C.break语句可用于if体内,它将退出if语句;
D.break语句在一个循环体内可以出现多次。
12.下列关于开关语句的描述中,(A)是正确的。
A.开关语句中default子句可以没有,也可有一个;
B.开关语句中每个语句序列中必须有break语句;
C.开关语句中default子句只能放在最后;
D.开关语句中case子句后面的表达式可以是整型表达式。
13.在一个被调用函数中,关于return语句使用的描述,(D)是错误的。
A.被调用函数中可以不用return语句;B.被调用函数中可以使用多个return语句;
C.被调用函数中,如果有返回值,就一定要有return语句;
D.被调用函数中,一个return语句可返回多个值给调用函数。
14.下列的(D)是引用调用。
A.形参是指针,实参是地址值;B.形参和实参都是变量;
C.形参是数组名,实参是数组名;D.形参是引用,实参是变量。
15.在传值调用中,要求(C)。
A.形参和实参类型任意,个数相等;
B.实参和形参类型都完全一致,个数相等;
C.实参和形参对应的类型一致,个数相等;
D.实参和形参对应的类型一致,个数任意。
16.在C++中,关于下列设置参数默认值的描述中,(C)是正确的。
A.不允许设置参数的默认值;
B.设置参数默认值只能在定义函数时设置;
C.设置参数默认值时,应该是先设置右边的再设置左边的;
D.设置参数默认值时,应该全部参数都设置。
17.重载函数在调用时选择的依据中,(D)是错误的。
A.参数个数;B.参数的类型;C.函数名字;D.函数的类型
18.采用函数重载的目的在于(D)。
A.实现共享;B.减少空间;C.提高速度;D.使用方便,提高可读性
19.在下列关键字中,用以说明类中公有成员的是(A)。
A.public;B.private;C.protected;D.friend;
20.下列的各类函数中,(C)不是类的成员函数。
A.构造函数;B析构函数;C.友元函数;D.拷贝初始化构造函数
21.作用域运算符的功能是(D)。
A.标识作用域的级别的;B.指出作用域的范围的;
C.给定作用域的大小的;D.标识某个成员是属于哪个类的。
22.(D)不是构造函数的特征。
A.构造函数的函数名与类名相同;B.构造函数可以重载;
C.构造函数可以设置缺省参数;D.构造函数必须指定类型说明。
23.(A)是析构函数的特征。
A.一个类中只能定义一个析构函数;B.析构函数名与类名不同;
C.析构函数的定义只能在类体内;D.析构函数可以有一个或多个参数。
24.通常的拷贝初始化构造函数的参数是(C)。
A.某个对象名;B.某个对象的成员名;
C.某个对象的引用名;D.某个对象的指针名。
25.关于成员函数特征的下述描述中,(A)是错误的。
A.成员函数一定是内联函数;B.成员函数可以重载;
C.成员函数可以设置参数的缺省值;D.成员函数可以是静态的。
26.下述静态数据成员的特征中,(A)是错误的。
A.说明静态数据成员时前边要加修饰符static;
B.静态数据成员要在类体外进行初始化;
C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;
D.静态数据成员不是所有对象所共用的。
27.友元的作用(A)。
A.提高访问对象成员的效率;B.加强类的封装性;
C.实现数据的隐藏性;D.增加成员函数的种类。
28.已知:
类A中一个成员函数说明如下:
voidSet(A&a);
其中,A&a的含意是(C)
A.指向类A的指针为a;B.将a的地址值赋给变量Set;
C.a是类A的对象引用,用来作函数Set()的形参;
D.变量A与a按位相与作为函数Set()的参数。
29.下列关于对象数组的描述中,(D)是错误的。
A.对象数组的下标是从0开始的;B.对象数组的数组名是一个常量指针;
C.对象数组的每个元素是同一个类的对象;D.对象数组只能赋初值,而不能被赋值。
30.已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中,(A)是正确的。
A.voidprint()const;B.constvoidprint();
C.voidconstprint;D.voidprint(const);
31.关于new运算符的下列描述中,(D)是错误的。
A.它可以用来动态创建对象和对象数组;
B.使用它创建的对象或对象数组可以使用运算符delete删除;
C.使用它创建对象时要调用构造函数;D.使用它创建对象数组时必须指定初始值。
32.关于delete运算符的下列描述中,(C)是错误的。
A.它必须用于new返回的指针;B.它也适用于空指针;
C.对一个指针可以使用多次该运算符;
D.指针名前只用一对方括号符,不管所删除数组的维数。
33.下列说明中,
constchar*ptr;
ptr应该是(C)
A.指向字符常量的指针;B.指向字符的常量指针;
C.指向字符串常量的指针;D.指向字符串的常量指针;
34.下列定义中,(B)是定义指向数组的指针p。
A.int*p[5];B.int(*p)[5];C.(int*)p[5];D.int*p[];
35.下列对派生类的描述中,(D)是错误的。
A.一个派生类可以作另一个派生类的基类;B.派生类至少有一个基类;
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员;
D.派生类中继承的基类成员的访问权限到派生类保持不变。
36.派生类的对象对它的基类成员中(A)是可以访问的。
A.公有继承的公有成员;B.公有继承的私有成员;
C.公有继承的保护成员;D.私有继承的公有成员;
37.派生类的构造函数的成员初始化列中,不能包含(C)。
A.基类的构造函数;B.派生类中子对象的初始化;
C.基类的子对象初始化;D.派生类中一般数据成员的初始化。
38.关于多继承二义性的描述中,(C)是错误的。
A.一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性;
B.解决二义性的最常用的方法是对成员名的限定法;
C.基类和派生中同时出现的同名函数,也存在二义性问题;
D.一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现二义性。
39.设置虚基类的目的是(B)。
A.简化程序;B.消除二义性;C.提高运行效率;D.减少目标代码。
40.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化(D)。
A.与虚基类下面的派生类个数有关;B.多次;C.二次;D.一次。
41.对定义重载函数的下列要求中,(D)是错误的。
A.要求参数的个数不同;B.要求参数中至少有一个类型不同;
C.要求参数个数相同时,参数类型不同;D.要求函数的返回值不同。
42.下列函数中,(C)不能重载。
A.成员函数;B.非成员函数;C.析构函数;D.构造函数。
43.下列对重载函数的描述中,(A)是错误的。
A.重载函数中不允许使用缺省参数;
B.重载函数中编译器根据参数表进行选择;
C.不要使用重载函数来描述毫无相干的函数;
D.构造函数重载将会给初始化带来多种方式。
44.关于虚函数的描述中,(C)是正确的。
A.虚函数是一个static类型的成员函数;B.虚函数是一个非成员函数;
C.基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数;
D.派生类的虚函数与基类的虚函数具有不同的参数个数和类型。
45.关于纯虚函数和抽象类的描述中,(C)是错误的。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现;
B.抽象类是指具有纯虚函数的类;
C.一个基类说明有纯虚函数,该基类的派生类一定不再是抽象类;
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。
46.下列描述中,(D)是抽象类的特征。
A.可以说明虚函数;B.可以进行构造函数重载;
C.可以定义友元函数;D.不能说明其对象。
47.面向对象程序设计中的数据隐藏指的是(D)
A.输入数据必须输入保密口令B.数据经过加密处理
C.对象内部数据结构上建有防火墙D.对象内部数据结构的不可访问性
[解析]输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向对象程序设计中所指的数据隐藏。
面向对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中。
这就是面向对象程序设计中的数据隐藏所指。
48.下列各项中不符合函数重载必须满足的条件的是(C)
A.有不同的参数个数B.对应的参数类型不相同
C.A和B必须同时满足D.A和B只要满足一个即可
[解析]我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是:
①有不同的参数个数;或者②对应的参数有不相同的数据类型,即①和②中只要有一个满足就可以了。
当然两者都满足更好,但这不是必须的。
49.下列带缺省值参数的函数说明中,正确的说明是(A)
A.intFun(intx,inty=2,intz=3);B.intFun(intx=1,inty,intz=3);
C.intFun(intx,inty=2,intz);D.intFun(intx=1,inty,intz=3);
[解析]在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数。
从所给出的四个选项来看,只有"intFun(intx,inty=2,intz=3)"符合这条规定,其它的都不符合。
50.有如下的对类"CSample"的说明,其中(A)是错误的。
classCSample{
A.inta=23;
B.CSample();
public:
C.CSample(intval);
D.~CSample();
}
[解析]在下面对类"CSample"说明中,"CSample()"和"CSample(intval)"是该类重载的构造函数."~CSample()"是该类的析构函数,这三个语句都是正确的。
错误的语句是"inta=23",因为它违反了在类的声明(不管是引用性声明,还是定义性声明)中都不能以赋值表达式的形式给它的数据成员进行初始化。
51.已知类A中的一个成员函数的说明如下:
voidSet(A&a);
则该函数的参数"A&a"的含义是(C)
A.指向A的指针为a
B.将变量a的地址赋给类A
C.类A对象引用a用作函数的形参
D.变量A与a按位与后作函数参数
[解析]因为A是一个类,所以"A&a"表示a是类A的对象,但因为对象a的前缀了符号"&",则"&a"表示是类A的对象引用。
所以"A&a"的含义是类A对象引用a用作函数的形参。
52.若类A和类B的定义如下:
classA{
public:
inti,j;
voidget();
};
classB:
A{
inti,j;
protected:
intk;
public:
voidmake();
};
voidB:
:
make(){k=i*j;}
则上述语句中(D)是非法的表达。
A.voidget();B.intk;C.voidmake();D.k=i*j;
[解析]对于给定的四项中,前三项都是正确的,只有第四项是错误的。
因为,类B是类A的私有派生类(缺省访问类型),所以A中的公类型的数据成员在类B中成为了私有数据成员,但函数"voidB:
:
make()"既然是类B的成员函数,则既可访问类A中的公有数据成员,也能访问类B中的私有数据成员,则表达式"k=i*j;"造成了访问的二义性,即其中的i和j,到底是取自类A呢?
还是取自类B呢?
53.下面的主函数体中,(A)是错误的。
classA{
inti;
public:
virtualvoidfun()=0;
A(inta){i=a;}
};
classB:
publicA{
intj;
public:
voidfun(){cout<<"B:
:
fun()\n";}
B(intb,intc):
A(b){j=c;}
};
voidmain()
A.{Aa(5);}B.{A*pa;}C.{Bb(7);}D.{B*pb;}
[解析]在类A中,函数"virtualvoidfun()=0"为纯虚函数,因此,类A为抽象类。
作为抽象类,它是不能被用来定义具体对象的,而语句"Aa(5);"恰恰是定义抽象类的对象的,所以它是错误的
54.拷贝构造函数的作用是(C)
A.进行数据类型的转换B.用对象调用成员函数
C.用对象初始化对象D.用一般类型的数据初始化对象
[解析]进行数据类型的转换和用一般类型的数据初始化对象都是一般构造函数的功能。
用对象调用成员函数不用构造函数,只要用"对象名.成员函数名"即可。
所以拷贝(复制)构造函数的作用,只能是用对象来初始化对象。
55.下列说法中,正确的说法是(B)
A.所有的运算符都能被重载
B.运算符被重载时,它们的优先级与结合性不会改变
C.当需要时,我们可以自定义一个运算符来进行重载
D.每个运算符都可以被重载成成员函数和友元函数
[解析]当重载运算符时,不是所有的运算符都能被重载,有几个运算符是不能被重载的,如三目运算符'?
:
','.','*',':
:
'.'#'等;也不是每个运算符都可以被重载成成员函数和友元函数,如运算符'=','()','[]'和'->'都只能被重载成成员函数;无论何时,都不能自定义运算符来进行重载,也即重载只能对已有运算符进行;但是运算符被重载时,它们的优先级与结合性不会改变。
56.下面对结构或类中成员的访问中,不正确的访问是(A)
A.*pointer.salary;(其中pointer为指向类对象的指针)B.pointer->salary;
C.x=worker.salary;(其中worker为具有类类型的对象)
D.Location&rA=A1;intx=rA.GetX();(Location为已定义的类,A为对象)
[解析]因pointer为指向类对象的指针,所以"pointer->salary"是正确的访问数据成员的形式;因worker为具有类类型的对象,所以"worker.salary"也是正确的访问数据成员的形式;因Location为已定义的类,A1为对象,所以"Location&rA=A1;intx=rA.GetX();"表示以对象A1初始化对象引用rA,然后由对象引用rA调用成员函数GetX()给变量x赋值,这样的访问成员函数的形式也是正确的;"*pointer.salary;"中,因为运算符'.'的优先级高于运算符'*'的优先级,所以相当于"*(pointer.salary);",那正确的形式应该是"*(pointer->salary);"。
故"*pointer.salary"是不正确的访问。
57.以下不属于存取权限的是(B)。
A.publicB.staticC.protectedD.private
58.以下叙述中正确的是(D)
A.在C++中数据封装是通过各种类型来实现的
B.在C++中,数据封装可以由struct关键字提供
C.数据封装就是使用结构类型将数据代码连接在一起
D.数据封装以后,仍然可以不通过使用函数就能直接存取数据。
59.以下叙述中不正确的是:
(D)
A.对象之间可以相互赋值B.对象可以用作数组的元素
C.对象可以用作函数参数D.一个对象不能用作另一个对象的成员
59..以下叙述中正确的是:
(B)
A.在定义构造函数时可以指定返回类型B.在定义析构函数时不能指定参数
C.一个类只能有一个构造函数D.在一个类可以有多个析构函数
60.假定类A已经定义,对于以A为基类的单一继承类B,以下定义中正确的是:
(A)
A.classB:
publicA{//...};B.classA:
publicB{//...};
C.classB:
publicclassA{//...};D.classA:
classBpublic{//...};
61.下面叙述不正确的是:
(D)
A.派生类一般都用公有派生;B.对基类成员的访问必须是无二义性的;
C.赋值兼容原则也适用于多重继承的组合;
D.基类的公有成员在派生类中仍然是公有的。
62.C++类体系中,不能被派生类继承的有(A)。
A.转换函数.构造函数B.构造函数.赋值操作函数
C.虚函数.静态成员函数D.静态成员函数.转换函数
63.以下基类中的成员函数(C)表示纯虚函数
A.virtualvoidvf(int);B.voidvf(int)=0;
C.virtualvoidvf()=0;D.virtualvoidvf(int){}
64.通过一个对象调用虚函数时,C++系统对该调用采用(A)。
A.动态联编B.静态联编C.不确定是哪种联编D.函数重载
65.以下叙述不正确的是(C)
A.转换函数不能带有参数B.转换函数不能指定返回类型
C.转换函数不能说明为虚函数D.一个类可以有多个转换函数
66.有如下一个函数模板:
template
Tmax(Tx,Ty){return(x>y)?
(x):
(y);}
当对T传给char*类型时,则可能产生错误结果,所以应该为这个函数模板提供一个(C)
A.模板实例B.特定模板函数C.重载函数模板D.替换模板
67.下面的针对在C++中说明类的各种建议中,(C)是不正确的。
A.尽量使类接口既完整又最紧凑B.尽量少用const
C.避免对指针和数值类型重载D.明确禁用无端隐含生成的成员函数
68.一个C++程序至少应包含(B)个函数。
A.0B.1C.2D.3
69.在微型机上,一个unsignedint型变量在内存中占(B)个字节的存储空间。
A.1B.2C.3D.4
70.下面语句中(C)是非法的。
A.inta=3,b=3;B.inta,b=3;C.inta=b=3;D.inta=3,b
71.下述语句
intx,i=3;x=(i++)+(i++)+(i++);
执行后,x的结果为(A)。
A.9B.15C.0D.12
72.设a=12,n=5,则表达式a%=(n%=2)运算后,a的值为(A).
A.0B.1C.6D.12
73.设a=3,b=2,c=l,则表达式a=b>c的值为(A).
A.0B.1C.2D.3
74.C++编译器通常不提供对(C.)的检查。
A.函数原型B.变量类型C.数组边界D.指针类型
75.只有(D)变量才能说明为extern变量。
A.全局变量B.静态变量C.寄存器变量D.自动变量
76.设有两个int型的指针p1和p2,则p1和p2(B)。
A.可以相加,但不可以相减B.可以相减,但不可以相加
C.既不能相加,也不能相减D.可以相加,也可以相减
78.假设已定义了一个字符型指针char*p;欲使指针指向常量串"Ilovechina!
",可用语句(B)来完成。
A.*p="IloveChina!
";B.p="IloveChina!
";
C.*p->'IloveChina!
";D.p->"IloveChina!
"
79.下面关键字中(D)不可以刚来定义类。
A.classB.structC.unionD.enum
80.一个类的构造函数(D).
A.可以有不同的返回类犁B.只能返回整型
C.只能返回void型D.没有任何返同类刑
81.若类X是类Y的友元类,则下列访问关系中(B)是正确的
A.类X的成员不能访问类Y的私有成员B.类X的成员可以访问类Y的私有成员
C.类Y的成员可以访问类X的私有成员D.仅类Y的公共成员可访问类X的私有成员
82.在c++中,一个虚函数是通过关键字(A)放在其基类说明的前面来加以说明的
A.virtualB.protectedC.operatorD.this
83.在派生关系中,(A)。
A.构造函数和释放函数是不能继承的B.构造函数可以继承,但释放函数不可以继承
C.构造函数不可以继承,但释放函数可以继承
D.构造函数和释放函数都能继承
84.下列标识符中(A)是正
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序性 设计 试题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)