5面向对象的程序设计基础.docx
《5面向对象的程序设计基础.docx》由会员分享,可在线阅读,更多相关《5面向对象的程序设计基础.docx(30页珍藏版)》请在冰豆网上搜索。
![5面向对象的程序设计基础.docx](https://file1.bdocx.com/fileroot1/2023-5/28/40cb6825-9564-41c1-bd31-3d1f45a4fc3a/40cb6825-9564-41c1-bd31-3d1f45a4fc3a1.gif)
5面向对象的程序设计基础
封面
作者:
PanHongliang
仅供个人学习
知识模块五面向对程序设计基础
一、选择题
1.( )不是构造函数的特征。
A、构造函数的函数名与类名相同;B、构造函数可以重载;
C、构造函数可以设置缺省参数;D、构造函数必须指定类型说明。
2.( )是析构函数的特征。
A、析构函数可以有一个或多个参数;B、析构函数名与类名不同;
C、析构函数的定义只能在类体内;D、一个类中只能定义一个析构函数; 3.要运行一个C语言编写的应用程序如下:
main(){
printf("helloworld")。
}
在VC6的开发环境中,应该建立哪种类型的工程?
A,Win32Application
B,Win32ConsoleApplication
C,MFCAppWizard(exe)
D,UtilityProject
4.关于VC6建立的工程的说法,正确的是:
A,工程只能包含.cpp和.h类型的文件
B,工作区文件的后缀是.dsp
C,用鼠标双击工作区文件可以打开整个工程
D,在VC的FileView中可以看到工程中所有的文件,包括工作区文件,工程文件等
5.在VC6中提供了成员方法的自动列表和方法参数的自动提示功能,但有时不能正常显示,这是应该删除
该工程目录下那种后缀类型的文件后,再次打开工程,就可以正常提示了。
A,clw
B,ncb
C,opt
D,aps
6.有关句柄(handle)的说法,下列不正确的是:
A 句柄是一个4字节长的整数值
B 句柄用来标识应用程序中不同的对象或同类对象中的不同实例
C 消息是句柄的一种
D 画笔的句柄类型是HPEN,画刷的句柄类型是HBRUSH
7.C++对C语言作了很多改进,下列描述中( )使得C语言发生了质变,从面向过程变成了面向对象。
A、增加了一些新的运算符;
B、允许函数重载,并允许设置缺省参数;
C、规定函数说明必须用原型;
D、引进了类和对象的概念;
8.下列描述中,( )是错误的。
A、内联函数主要解决程序的运行效率问题;
B、内联函数的定义必须出现在内联函数第一次被调用之前;
C、内联函数中可以包括各种语句;
D、对内联函数不可以进行异常接口声明;
9.在C++中,关于下列设置缺省参数值的描述中,( )是正确的。
A、不允许设置缺省参数值;
B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C、只能在函数的定义性声明中指定参数的缺省值;
D、设置缺省参数值时,必须全部都设置;
10.( )不是构造函数的特征。
A、构造函数的函数名与类名相同;B、构造函数可以重载;C、构造函数可以设置缺省参数;D、构造函数必须指定类型说明。
11.是析构函数的特征。
A、析构函数可以有一个或多个参数;B、析构函数名与类名不同;C、析构函数的定义只能在类体内;D、一个类中只能定义一个析构函数
12.C++对C语言作了很多改进,下列描述中( )使得C语言发生了质变,从面向过程变成了面向对象。
A、增加了一些新的运算符;B、允许函数重载,并允许设置缺省参数;
C、规定函数说明必须用原型;D、引进了类和对象的概念;
13.下列描述中,( )是错误的。
A、内联函数主要解决程序的运行效率问题;B、内联函数的定义必须出现在内联函数第一次被调用之前;
C、内联函数中可以包括各种语句;D、对内联函数不可以进行异常接口声明;
14.在C++中,关于下列设置缺省参数值的描述中,( )是正确的。
A、不允许设置缺省参数值;B、在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
C、只能在函数的定义性声明中指定参数的缺省值;D、设置缺省参数值时,必须全部都设置;
15.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是()。
AfailBeof
CbadDgood
16.C++语言是从早期的C语言逐渐发展演变而来的。
与C语言相比,它在求解问题方法上进行的最大改进是()。
A面向过程B面向对象
C安全性 D复用性
17.C++对C语言作了很多改进,即从面向过程变成为面向对象的主要原因是_____
A.增加了一些新的运算符 B.允许函数重载,并允许设置缺省参数
C.规定函数说明符必须用原型 D.引进了类和对象的概念
18.C++源程序文件的缺省扩展名是_____
A.cpp B.exe C.obj D.lik
19.在inta=3,int*p=&a;中,*p的值是_____
20.类的析构函数是在_____调用的。
A.类创建时 B.创建对象时
C.删除对象时 D.不自动调用
21.假定AB为一个类,则执行ABx;语句时将自动调用该类的_____
A.有参构造函数B.无参构造函数
C.拷贝构造函数D.赋值构造函数
22.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:
A. AB operator+(AB &a,AB &b) B. AB operator+(AB &a)
C. operator+(AB a) D. AB &operator+()
23.假定AB为一个类,则执行ABx;语句时将自动调用该类的_____
A.有参构造函数 B.无参构造函数
C.拷贝构造函数 D.赋值构造函数
)
25.假定AB为一个类,则该类的拷贝构造函数的声明语句为_________.
A.AB&(ABx)。
B. AB(ABx) C.AB(AB&)。
D.AB(AB*x)
26.下列哪项不是面向对象程序设计的主要特征?
A.封装B.继承C.多态D结构
27.对象之间的相互作用和通信是通过消息。
下列哪项不是消息的组成部分?
A接受消息的对象B要执行的函数的名字
C.要执行的函数的内部结构D函数需要的参数
28.关于C++与C语言关系的描述中,()是错误的。
A.C语言是C++语言的一个子集B.C语言与C++语言是兼容的
C.C++语言对C语言进行了一些改进D.C++语言和C语言都是面向对象的
29.已知:
类A中一个成员函数说明如下:
voidSet(A&a)。
其中,A&的含义是()。
A.指向类A的指针为a
B将a的地址值赋给变量Set
C.a是类A对象的引用,用来作函数Set()的参数
D.变量A与a按位与作为函数Set()的参数
30.已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。
A.voidprint()const。
B.constvoidprint()。
Cvoidconstprint()。
D.voidprint(const)。
31.如果类A被说明成类B的友元,则_____
A.类A的成员即类B的成员B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元
32.假定AB为一个类,则执行ABx;语句时将自动调用该类的_____
A.有参构造函数B.无参构造函数
C.拷贝构造函数D.赋值构造函
33.下面的函数声明中,_______是”voidBC(inta,intb)。
”的重载函数?
A.intBC(inta,intb)B.voidBC(inta,charb)
C.floatBC(inta,intb,intc=0)D.voidBC(inta,intb=0)
34.下面的哪一个保留字不能作为函数的返回类型?
_____
A.voidB.intC.newD.long
35.下列关键字中,用以说明类中公有成员的是()。
Afriend。
Bprivate。
Cprotected。
Dpublic
36.进行文件操作时需要包含()文件。
Aiostream.h。
Bstdlib.h。
Cstdio.h。
Dfstream.h
C指向字符串常量的指针。
D指向字符串的指针常量
37.能用作用户自定义标识符。
AfriendB-varC)3xyzDFloat
38.面向对象程序设计将数据与放在一起,做为一个相互依存、不可分割的整体来处理。
A对数据的操作B信息C数据隐藏D数据抽象
39.一个类的析构函数。
A唯一的B允许重载C至多可有两个D只能是缺省的
40.下列说法正确的是:
[]。
A一个类的对象可以是另一个类的成员
B一个类可以作为另一个类的派生类
C一个类定义在另一个类的说明中
D以上说法均正确
41.下列各类函数中,不是类的成员函数。
A构造函数B析构函数C友元函数D拷贝构造函数
42.有关析构函数的说法不正确的是。
A析构函数有且只有一个B析构函数无任何函数类型
C析构函数和构造函数一样可以有形参D析构函数的作用是在对象被撤销时收回先前分配的内存空间
43.通常拷贝构造函数的参数是。
A某个对象名B某个对象的成员名
C某个对象的引用名D某个对象的指针名
44.已知:
类A中一个成员函数说明如下:
voidSet(A&a)。
其中,A&的含义是()。
A.指向类A的指针为a
B将a的地址值赋给变量Set
Ca是类A对象的引用,用来作函数Set()的参数
D.变量A与a按位与作为函数Set()的参数
45.已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。
Avoidprint()const。
B.constvoidprint()。
C.voidconstprint()。
D.voidprint(const)。
46.类的析构函数是在_____调用的。
A.类创建时B.创建对象时
C.删除对象时D.不自动调用
47.如果类A被说明成类B的友元,则_____
A.类A的成员即类B的成员B.类B的成员即类A的成员
C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元
二、填空题
(1)在用class定义一个类时,数据成员和成员函数的默认访问权限是。
(2)含有纯虚函数的类称为。
(3)派生类的主要用途是可以定义其基类中_______。
(4)当建立_______,程序自动调用该类的构造函数。
(5)类是用户定义的类型,具有类类型的变量称作_______。
(6)当一个成员函数被调用时,该成员函数的___指向调用它的对象。
(7)拷贝函数通过_______使用引用来初始化创建中的对象。
(8)静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是_________。
(9)对象的三大基本特性是多态性、_______、封装性。
(10)当一个类对象离开它的作用域时,系统将自动调用该类的______________.
(11)假定AB为一个类,则执行"ABa[10]。
"语句时,系统自动调用该类构造函数的次数为_____________________.
(12)指向基类的对象的指针变量也可以指向的对象。
(13)面向对象程序中,实体的状态由表示,其行为由表示。
(14)定义________函数时,应在参数个数或参数类型上有所不同。
(15)类是用户定义的类型,具有________称作对象。
(16)使用指向对象的指针来标识类的成员,则必须使用的运算符是_。
(17)拷贝初始化构造函数使用________来初始化创建中的对象。
(18)封装要求一个对象应具备明确的功能,并具有_________以便和其它对象相互作用。
(25)在删除一个动态对象时,将自动调用该动态对象所属类的_________函数。
三、判断题
(1)在定义一个类时,不能在类说明中对数据成员使用表达式进行初始化。
()
(2)如果在类声明中没有定义复制构造函数,就不能用一个对象去初始化另一个对象()
(3)类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性。
(对)
(4)在面向对象的程序设计中,凡操作属于同一种对象的,就将这些操作放进该对象类中,形成该类的成员函数。
()
(5)说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。
()
(6)所有的表达式都有值。
()
(7)程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所带来的编译工作量。
()
(8)类的静态数据成员需要在定义每个类的对象时进行初始化。
()
四、程序填空
(1)在下面程序的横线处填上适当的语句,使该程序执行结果为10.
#include“iostream.h”
classMyClass
{ public:
MyClass(inta){x=a。
}
//取x值
private:
intx。
}。
intmain()
{ MyClassmy(10)。
cout< return0。
}
(2)在下面程序的底画线处填上适当的字句,使该程序执行结果为60。
#include
classbase{intX。
public∶
voidint(intinitX){X=initX。
}
intGetnum(){returnX+7。
}
voidmain()
{_______
_______
cout<}
(3)在下面程序的底画线处填上适当的字句,完成类中成员函数的定义。
#include
classbox{private∶
intcolor。
intupx,upy。
intlowx,lowy。
public∶
friendintsame_color(linea,boxb)。
_______。
voiddefine_box(intx1,inty1,intx2,inty2){upx=x1。
upy=y1。
}
}。
classline{private∶
intcolor。
intstartx,starty。
intlen。
public∶
friend_intsame_color(linea,boxb)。
_______;
voiddefine_line(intx,inty){startx=x。
}
}。
intsame_color(linea,boxb)
{if(a.color==b.color)
return1。
return0。
}
(4)在下面程序的底画线处填上适当的字句,完成程序。
#include
classA{
_______(inti){cout}
}。
clossB∶A{
public∶voidh(){cout<<”h\n”。
}
_______。
}。
voidmain()
{Bd1。
d1.f(6)。
d1.h()。
}
(5)在下列程序的空格处填上适当的字句,使输出为:
0,8,5。
#include
#include
classMagic{
doublex。
public∶
Magic(doubled=0.00)∶x(fabs(d)){}
Magic_______{returnMagic(sqrt(x*x+c.x*c.x))。
}
_______<<(ostream&os,Magicc){returnos<}。
voidmain()
{Magicma。
cout<}
(6)在下面程序的底画线处填上适当的字句,使该程序执行结果为10。
#include
classbase{intX。
public:
________∥为X置值
________∥取X值
}。
voidmain()
{basetest。
test.init(3)。
cout<}
(7)在下列程序的底画线处填上适当的字句,完成类中成员函数的定义。
#include
classbox{private:
intcolor。
intupx,upy。
intlowx,lowy。
public:
friendintsame-color(linea,boxb)。
________set-color(intc){color=c。
}
voiddefine-box(intx1,inty1,intx2,inty2){upx=x1。
upy=y1。
}
}。
classline{private:
intcolor。
intstartx,starty。
intlen。
public:
friend-intsame-color(linea,boxb)。
________set-color(intc){color=c。
}
voiddefine-line(intx,inty){startx=x。
}
}。
intsame-color(linea,boxb)
{if(a.color==b.color)
return1。
return0。
}
(8)在下面程序的底画线处填上适当的字句,完成程序。
#include
classA{
public:
voidf(inti){cout<
}
voidg(){cout<<”\n”。
}
}。
class________{
public:
voidh(){cout<<”h\n”。
}
A∶∶f。
}。
voidmain()
{Bd1。
d1.f(6)。
________.h()。
}
(9)在下列程序的空格处填上适当的字句,使输出为:
0,7,5。
#include
#include
classMagic{
doublex。
public∶
________(doubled=0.00)∶x(fabs(d)){}
Magicoperator+(Magicc){returnMagic(sqrt(x*x+c.x*c.x))。
}
friendostream&operator<<(ostream&os,Magicc){returnos<}
}。
voidmain()
{
________。
cout<}
(10)在下面程序横线处填上适当字句,以使该程序执行结果为:
5 4 3 2 1
0 5.5 4.4 3.3 2.2 1.1
#include
template
voidf(){
;
for(inti=0。
ii++)
t=a[i],a[i]=a[n-1-i],a[n-1-i]=t。
}
voidmain(){
inta[5]={1,2,3,4,5}。
doubled[6]={1.1,2.2,3.3,4.4,5.5}。
f(a,5)。
f(d,6)。
for(inti=0。
i<5。
i++)
cout<cout<for(i=0。
i<6。
i++)
cout<cout<}
五、程序阅读题
1.分析以下程序执行的结果
#include
#include
classSample
{
public:
intx,y。
Sample(){x=y=0。
}
Sample(inta,intb){x=a。
y=b。
}
voiddisp()
{
cout<<"x="<}
}。
voidmain()
{
Samples1(2,3)。
s1.disp()。
}
2.分析以下程序的执行结果
#include
classSample
{
intx,y。
public:
Sample(){x=y=0。
}
Sample(inta,intb){x=a。
y=b。
}
~Sample()
{
if(x==y)
cout<<"x=y"<else
cout<<"x!
=y"<}
voiddisp()
{
cout<<"x="<}
}。
voidmain()
{
Samples1(2,3)。
s1.disp()。
}
3.分析以下程序的输出结果
#include
classSample
{
intx。
public:
Sample(inta)
{
x=a。
cout<<"constructingobject:
x="<}
}。
voidfunc(intn)
{
staticSampleobj(n)。
}
voidmain()
{
func
(1)。
func(10)。
}
4分析以下程序的执行结果
#include
classSample
{
intx,y。
public:
Sample(){x=y=0。
}
Sample(inta,intb){x=a。
y=b。
}
voiddisp()
{
cout<<"x="<}
}。
voidmain()
{
Samples(2,3),*p=&s。
p->disp()。
}
5分析以下程序的执行结果
#include
classSample
{
public:
i