文档视界 最新最全的文档下载
当前位置:文档视界 › 面向对象课后题答案

面向对象课后题答案

面向对象课后题答案
面向对象课后题答案

1

面向对象程序设计概论

面向对象程序设计教程(C++语言描述)题解与课程设计指导

第1章

面向对象程序设计概论

一、名词解释

抽象封装消息

【问题解答】

面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。

面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。

消息是面向对象程序设计用来描述对象之间通信的机制。一个消息就是一个对象要求另一个对象实施某种操作的一个请求。

二、填空题

(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。

(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。

(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。

(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。

三、选择题(至少选一个,可以多选)

(1)面向对象程序设计着重于( B )的设计。

A. 对象

B. 类

C. 算法

D. 数据

(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做( C )。

A. 抽象

B. 继承

C. 封装

D. 多态

(3)在面向对象程序设计中,类通过( D )与外界发生关系。

A. 对象

B. 类

C. 消息

D. 接口

(4)面向对象程序设计中,对象与对象之间的通信机制是( C )。

A. 对象

B. 类

C. 消息

D. 接口

(5)关于C++与C语言的关系的描述中,( D )是错误的。

A. C语言是C++的一个子集

B. C语言与C++是兼容的

C. C++对C语言进行了一些改进

D. C++和C语言都是面向对象的

【结果分析】

C语言是面向过程的。C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。

(6)面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。

A. 算法

B. 信息

C. 数据隐藏

D. 数据抽象

(7)下面( A )不是面向对象系统所包含的要素。

A. 重载

B. 对象

C. 类

D. 继承

【结果分析】

面向对象=对象+类+继承+消息+多态

(8)下面说法正确的是( BC )。

A. 将数据结构和算法置于同一个函数内,即为数据封装

B. 一个类通过继承可以获得另一个类的特性

C. 面向对象要求程序员集中于事物的本质特征,用抽象的观点看待程序

D. 同一消息为不同的对象接受时,产生的行为是一样的,这称为一致性

【结果分析】

面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。将数据结构和算法置于同一个类内,即为数据封装。同一消息为不同的对象接受时,产生的行为可能是不一样的,这称为多态性。

(9)下面说法正确的是( AD )。

A. 对象是计算机内存中的一块区域,它可以存放代码和数据

B. 对象实际是功能相对独立的一段程序

C. 各个对象间的数据可以共享是对象的一大优点

D. 在面向对象的程序中,对象之间只能通过消息相互通信

【结果分析】

对象是计算机内存中的一块区域。在对象中,不但存有数据,而且存有代码,使得每个对象在功能上相互之间保持相对独立。对象之间存在各种联系,但它们之间只能通过消息进行通信。

四、判断题

(1)在高级程序设计语言中,一般用类来实现对象,类是具有相同属性和行为的一组对象的集合,它是创建对象的模板。(√ )

(2) C++语言只支持面向对象技术的抽象性、封装性、继承性等特性,而不支持多态性。(× )

【结果分析】

C++语言不仅支持面向对象技术的抽象性、封装性、继承性等特性,而且支持多态性。

(3)面向对象程序设计中的消息应该包含“如何做”的信息。(× )

【结果分析】

消息是面向对象程序设计用来描述对象之间通信的机制。向对象“发送消息”只需告诉对象做什么,对象根据这个消息决定如何做。

(4)一个消息只能产生特定的响应效果。(× )

【结果分析】

当一个对象发出消息时,由于接收对象的类型可能不同,所以,它们可能做出不同的反应。这样,一个消息可以产生不同的响应效果,这种现象叫做多态。(5)类的设计和类的继承机制实现了软件模块的可重用性。(√ )

(6) C++语言和Java语言均不是一个纯正的面向对象的程序设计的语言。(× )

【结果分析】

Java语言是一个纯正的面向对象的程序设计语言。

(7)学习C++语言是学习面向对象的程序设计方法的唯一途径。(× )

【结果分析】

程序设计方法是独立于具体程序设计语言的一种技术,学习C++语言是学习面向对象程序设计方法的重要途径之一。

(8)在C++语言中,类是支持数据封装的工具。(√ )

五、简答题

(1)什么是结构化程序设计方法?它有哪些优点和缺点?

【问题解答】

结构化程序设计方法着眼于系统要实现的功能,从系统的输入输出出发,分析系统要做哪些事情,进而考虑如何做这些事情,自顶向下地对系统的功能进行分解,来建立系统的功能结构和相应的程序模块结构,有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。

随着程序规模与复杂性的增长,这种面向过程的结构化程序设计方法存在明显的不足之处。首先是数据安全性问题。由于数据被每个模块所共用,因此是不安全的,一旦出错,很难查明原因。其次是可维护性及可重用性差。它把数据结构和算法分离为相互独立的实体,一旦数据结构需要改变时,常常要涉及整个程序,修改工作量极大并容易产生新的错误。每一种相对于老问题的新方法都要带来额外的开销。另外,图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。

(2)什么是面向对象程序设计方法?它有哪些优点?

【问题解答】

面向对象的程序设计方法中,将程序设计为一组相互协作的对象而不是一组相互协作的函数。在程序中,属性用数据表示,用来描述对象静态特征;行为用程序代码实现,用来描述对象动态特征。可见,在面向对象的程序设计方法中,对象是数据结构和算法的封装体。对象之间存在各种联系,它们之间通过消息进行通信。程序可表示为:

程序=对象+消息

在面向对象程序设计中应着重于类的设计。类正是面向对象语言的基本程序模块,通过类的设计来完成实体的建模任务。类通过一个简单的外部接口与外界发生关系。一个类中的操作不会处理到另一个类中的数据,这样程序模块的独立性、数据的安全性就有了良好的保障。程序的执行取决于事件发生的顺序,由顺序产生的消息来驱动程序的执行。不必预先确定消息产生的顺序,更符合客观世界的实际。并且面向对象程序设计方法提供了软件重用、解决大问题和复杂问题的有效途径,具有抽象性、封装性、继承性和多态性等特点。

(3)结构化程序设计方法与面向对象程序设计方法在对待数据结构和算法关系上有什么不同?

【问题解答】

结构化程序设计方法中,把数据结构和算法分离为相互独立的实体;而在面向对象程序设计中,数据结构和算法封装在一起,结合成一个独立的单位,即对象,并尽可能隐蔽对象的内部细节。对象的私有属性只能由这个对象的行为来读取和修改,与外部的联系通过公有行为充当外部接口。

2

从C到C++

面向对象程序设计教程(C++语言描述)题解与课程设计指导

第2章

从C到

C++

一、名词解释

引用内联函数重载函数

【问题解答】

所谓引用就是给对象取一个别名,使用该别名可以存取该对象。换句话说是使新对象和原对象共用一个地址。

内联函数是使用inline关键字声明的函数。

重载函数指在同一个作用域内名字相同而参数不同的函数。重载函数通常用来对具有相似行为而数据类型或数据个数不同的操作提供—个通用的名称。

二、填空题

(1)一般情况下,用C++语言编写的程序是由函数加上类组成的。

(2) C++有两种注释符号,一种是//,另一种是/*……*/。

(3)使用C++风格的输入输出,在程序中必须包含头文件“iostream”。(4) cin是预定义的标准输入流对象,>>是输入操作符,也称提取运算符。(5) cout是预定义的标准输出流对象,<<是输出操作符,也称插入运算符。(6)指针的值是它所指向那个对象的地址值。指针的类型是它所指向对象的类型。指针的内容便是它所指向对象的值。

(7) C++使用运算符&来定义一个引用,对引用的存取都是对它所引用的对象的存取。

(8)当一个函数调用出现在函数定义之前时,必须先用函数原型对函数进行声明。

(9) C++有值传递和引用传递两种参数传递机制。

(10)使用关键字inline声明的函数称为内联函数。

(11)运算符new用于进行动态内存分配,运算符delete用于释放动态分配的内存。

(12)下面程序的输出结果为x=10,y=10;

x=100,y=100。

#include

using namespace std;

int main()

{

int x=10,&y=x;

cout<<"x="<

int *p=&y;

*p=100;

cout<<"x="<

return 0;

}

三、选择题(至少选一个,可以多选)

(1)在整型指针变量p2、p3的定义中,错误的是( A )。

A. int p1,*p2,p3;

B. int*p2,p1,*p3;

C. int p1,*p2=&p1,*p3;

D. int*p2,p1,*p3=&p1;

【结果分析】

指针定义的具体格式如下所示:

<类型> *<指针名1>,*<指针名2>,…;

(2)若有定义“double xx=3.14,*pp=&xx;”,则*pp等价于( C )。

A. &xx

B. *xx

C. 3.14

D. xx

【结果分析】

pp指向xx所在的内存单元,这样*pp和xx等价。

(3)下面对引用的描述中( C )是错误的。

A. 引用是某个变量或对象的别名

B. 建立引用时,要对它初始化

C. 对引用初始化可以使用任意类型的变量

D. 引用与其代表的对象具有相同的地址

【结果分析】

所谓引用就是给对象取一个别名,使用该别名可以存取该对象,所以对引用初始化必须使用同类型的变量。

(4)函数没有返回值的时候,应该选择( A )的函数类型。

A. void

B. int

C. 不确定

D. float

(5)在函数的定义格式中,下面各组成部分中,( D )是可以省略的。A. 函数名 B. 函数体 C. 返回值类型 D. 函数参数

【结果分析】

函数的定义可以缺省形式参数,此时称为无参函数。

(6)对重载的函数来说,下面叙述不正确的是( D )。

A. 参数的类型不同

B. 参数的顺序不同

C. 参数的个数不同

D. 参数的个数、类型、顺序都相同,但函数的返回值类型不同

【结果分析】

对重载的函数来说,编译系统将根据函数参数的类型和个数来判断使用哪一个函数,所以重载函数参数的个数、类型、顺序不能都相同。

(7)下列有关设置函数参数默认值的描述中,( D )是正确的。

A. 对设置函数参数默认值的顺序没有任何规定

B. 函数具有一个参数时不能设置默认值

C. 默认参数要设置在函数的原型中,而不能设置在函数的定义语句中

D. 设置默认参数可使用表达式,但表达式中不可用局部变量

【结果分析】

在C++中,在函数原型中可以为一个或多个参数指定默认值。对函数参数设置默认值要注意以下几点。

◆若没有声明函数原型,参数的默认值可在函数定义的头部进行设置,否则必须在函数原型中进行设置。

◆在一个指定了默认值的参数右边不能出现没有指定默认值的参数。

◆设置默认参数可使用表达式,但表达式中不可用局部变量。

(8)下面说法正确的是( BC )。

A. 所有的函数都可以说明为内联函数

B. 具有循环语句、switch语句的函数不能说明为内联函数

C. 使用内联函数,可以加快程序执行的速度,但会增加程序代码的大小

D. 使用内联函数,可以减小程序代码大小,但使程序执行的速度减慢

【结果分析】

内联函数主要是解决程序的运行效率问题。在程序编译时,编译系统将程序中出现内联函数调用的地方用函数体进行替换,进而减少了程序运行的时间,但会增加程序代码的大小。它是以空间换取时间,因此内联函数适用于功能不太复杂,但要求被频繁调用的函数。

(9)一个函数功能不太复杂,但要求被频繁调用,应选用( A )。

A. 内联函数

B. 重载函数

C. 递归函数

D. 嵌套函数

(10) C++对C语言做了很多改进,下列描述中使得C语言发生了质变,即从面向过程变成面向对象的是( D )。

A. 增加了一些新的运算符

B. 允许函数重载,并允许设置默认参数

C. 规定函数说明必须用原型

D. 引进了类和对象的概念

【结果分析】

面向对象=对象+类+继承+消息+多态

四、判断题

(1) C++程序中,不得使用没有定义或说明的变量。(√ )

(2)使用const说明常量时,可以不必指出类型。(× )

【结果分析】

如果用const 定义的是一个整型常量,则类型说明符int可以省略。

(3)引用被创建时可以用任意变量进行初始化。(× )

【结果分析】

对引用初始化必须使用同类型的变量。

(4)一个返回引用的调用函数可以作为左值。(√ )

(5)函数可以没有参数,也可以没有返回值。(√ )

(6)没有参数的两个函数是不能重载的。(√ )

(7)函数可设置默认参数,但不允许将一个函数的所有参数都设置为默认参数。(× )

【结果分析】

函数可设置默认参数,且允许将一个函数的所有参数都设置为默认参数。

(8)运算符new分配的空间由运算符delete释放。(√ )

五、简答题

(1)名字空间的用途是什么?

【问题解答】

名字空间用来防止命名的冲突。

(2)引用有何用处?

【问题解答】

除了独立引用外,在C++程序中,引用的主要用途是用作函数参数和函数的返回值。

(3)比较值调用和引用调用的相同点与不同点。

【问题解答】

在值调用机制中,作为实参的表达式的值被复制到由对应的形参名所标识的一个对象中,作为形参的初始值。函数体对形参的访问、修改都是在这个标识对象上操作的,与实参无关,即数据的传递是单向的。

使用引用作函数的形参时,调用函数的实参要用变量名。实参传递给形参,相当于在被调用函数中使用了实参的别名。于是,在被调用函数中对形参的操作实质是对实参的直接操作,即数据的传递是双向的。

(4)内联函数有什么作用?它有哪些特点?

【问题解答】

内联函数是使用inline关键字声明的函数。在程序编译时,编译系统将程序中出现内联函数调用的地方用函数体进行替换,进而减少了程序运行的时间。

使用内联函数应注意以下几点。

◆递归函数不能定义为内联函数。

◆内联函数一般适合于不含有switch和while等复杂的结构且只有1~5条语句的小函数,否则编译系统将该函数视为普通函数。

◆内联函数只能先定义后使用,否则编译系统也将该函数视为普通函数。

◆对内联函数也不能进行异常接口声明。

(5)函数原型中的参数名与函数定义中的参数名以及函数调用中的参数名必须一致吗?

【问题解答】

不必一致。所有的参数是根据位置和类型而不是名字来区分的。

(6)重载函数时通过什么来区分?

【问题解答】

编译系统将根据函数参数的类型和个数来判断使用哪一个函数。

六、程序分析题(写出程序的输出结果,并分析结果)

#include

using namespace std;

int main()

{

int num=50;

int& ref=num;

ref=ref+10;

cout<<"num="<

num=num+40;

cout<<"ref="<

return 0;

}

【输出结果】

num=60

ref=100

【问题分析】

本题主要考查引用的含义。

【结果分析】

程序首先定义一个int类型的对象num,并给它赋初始值50。然后又定义了一个int类型的引用ref,并将它和num相联系。这样,无论是对num还是对ref进行操作,实际上都是对那个一开始放着50的物理单元的内容进行操作。

七、程序设计题

写出一个完整的C++程序,使用系统函数pow(x,y)计算xy的值,注意包含头文件cmath。

【问题分析】

本题主要考查简单的输入输出和标准库函数的调用方法。

【解题思路】

① 由于要用到系统函数pow(x,y),所以要包含头文件cmath。

② 要计算xy的值,首先必须知道x和y的值。为了程序的通用性,最好通过交互的方式输入x和y的值。

【参考程序】

// xt2_1.cpp

#include

#include

using namespace std;

int main()

{

float x,y;

cout<<"please input 2 floats to x,y:";

cin>>x>>y;

float z=pow(x,y);

cout<<"pow("<

return 0;

}

【输出结果】

please input 2 floats to x,y:3.1 2

pow(3.1,2)=9.61

3

类与对象

面向对象程序设计教程(C++语言描述)题解与课程设计指导

第3章

类与对象

一、填空题

(1)类定义中关键字private、public和protected以后的成员的访问权限分别是私有、公有和保护。如果没有使用关键字,则所有成员默认定义为private 权限。具有public访问权限的数据成员才能被不属于该类的函数所直接访问。(2)定义成员函数时,运算符“∷”是作用域运算符,“MyClass∷”用于表明其后的成员函数是在“MyClass类”中说明的。

(3)在程序运行时,通过为对象分配内存来创建对象。在创建对象时,使用类作为样板,故称对象为类的实例。

(4)假定Dc是一个类,则执行“Dc a[10],b(2)”语句时,系统自动调用该类构造函数的次数为11。

【结果分析】

创建10个数组元素需调用构造函数10次,创建对象b需调用构造函数1次,所以系统自动调用该类构造函数的总次数为11。

(5)对于任意一个类,析构函数的个数最多为1个。

(6) delete运算符通常用于实现释放该类对象中指针成员所指向的动态存储空间的任务。

(7) C++程序的内存格局通常分为4个区:数据区、代码区、栈区和堆区。(8)数据定义为全局变量,破坏了数据的封装性;较好的解决办法是将所要共享的数据定义为类的静态成员。

(9)静态数据成员和静态成员函数可由任意访问权限许可的函数访问。(10)友元函数和友元类统称为友元。

(11)友元的正确使用能提高程序的效率,但破坏了类的封装性和数据的隐蔽性。

(12)若需要把一个类A定义为一个类B的友元类,则应在类B的定义中加入一条语句: friend class A;。

二、选择题(至少选一个,可以多选)

(1)以下不属于类访问权限的是( B )。

A. public

B. static

C. protected

D. private

【结果分析】

类的访问权限有public、protected 和private。

(2)有关类的说法不正确的是( BC )。

A. 类是一种用户自定义的数据类型

B. 只有类的成员函数才能访问类的私有数据成员

C. 在类中,如不做权限说明,所有的数据成员都是公有的

D. 在类中,如不做权限说明,所有的数据成员都是私有的

【结果分析】

类是一种用户自定义的数据类型,类中成员均具有一种访问权限。关键字public、protected 和private以后的成员的访问权限分别是公有、保护和私有的,所有成员默认定义为private的。

私有成员是被隐藏的数据,只有该类的成员函数或友元函数才可以访问它。(3)在类定义的外部,可以被任意函数访问的成员有( C )。

A. 所有类成员

B. private或protected的类成员

C. public的类成员

D. public或private的类成员

【结果分析】

类是一种用户自定义的数据类型,类中成员均具有一种访问权限。公有成员定义了类的外部接口。私有成员是被隐藏的数据,只有该类的成员函数或友元函数才可以引用它。保护成员具有公有成员和私有成员的双重性质,可以被该类或派生类的成员函数或友元函数引用。可见在类定义的外部,可以被任意函数访问的成员是public的类成员。

(4)关于类和对象的说法( C )是错误的。

A. 对象是类的一个实例

B. 任何一个对象只能属于一个具体的类

C. 一个类只能有一个对象

D. 类与对象的关系和数据类型与变量的关系相似

【结果分析】

C++语言的类就是一种用户自己定义的数据类型,类和对象的关系就相当于基本数据类型与它的变量的关系,所以任何一个对象只能属于一个具体的类,但一个类可以有多个对象。

(5)设MClass是一个类,dd是它的一个对象,pp是指向dd的指针,cc是dd 的引用,则对成员的访问,对象dd可以通过( B )进行,指针pp可以通过( D )进行,引用cc可以通过( B )进行。

A. ∷

B. .

C. &

D.->

(6)关于成员函数的说法中不正确的是( C )。

A. 成员函数可以无返回值

B. 成员函数可以重载

C. 成员函数一定是内联函数

D. 成员函数可以设定参数的默认值

【结果分析】

与普通函数不同的是,成员函数是属于某个类的。成员函数的实现,可以放在类体内,也可以放在类体外。在类体外实现的成员函数不再是内联函数。

(7)下面对构造函数的不正确描述是( B )。

A. 系统可以提供默认的构造函数

B. 构造函数可以有参数,所以也可以有返回值

C. 构造函数可以重载

D. 构造函数可以设置默认参数

【结果分析】

构造函数不能指定返回类型,即使是void类型也不可以,当然不可能有返回值。(8)假定A是一个类,那么执行语句“A a,b(3),*p;”调用了( B )次构造函数。

A. 1

B. 2

C. 3

D. 4

【结果分析】

声明指针是不会调用构造函数的。

(9)下面对析构函数的正确描述是( AC )。

A. 系统可以提供默认的析构函数

B. 析构函数必须由用户定义

C. 析构函数没有参数

D. 析构函数可以设置默认参数

【结果分析】

析构函数的作用是在对象消失时执行一项清理任务。如果一个类中没有定义析构函数,系统将自动生成一个默认析构函数。析构函数没有参数,当然不可能设置默认参数。

(10)类的析构函数是( D )时被调用的。

A. 类创建

B. 创建对象

C. 引用对象

D. 释放对象

(11)创建一个类的对象时,系统自动调用( B );撤销对象时,系统自动调用( C )。

A. 成员函数

B. 构造函数

C. 析构函数

D. 复制构造函数

(12)通常拷贝构造函数的参数是( C )。

A. 某个对象名

B. 某个对象的成员名

C. 某个对象的引用名

D. 某个对象的指针名

(13)关于this指针的说法正确的是( B )。

A. this指针必须显式说明

B. 当创建一个对象后,this指针就指向该对象

C. 成员函数拥有this指针

D. 静态成员函数拥有this指针。

【结果分析】

this指针是由C++编译器自动产生且较常用的一个隐含对象指针,它不能被显式声明。当创建一个对象时,this指针就初始化指向该对象。但只有非静态成员函数才拥有this指针,并通过该指针来处理对象。

(14)下列关于子对象的描述中,( B )是错误的。

A. 子对象是类的一种数据成员,它是另一个类的对象

B. 子对象可以是自身类的对象

C. 对子对象的初始化要包含在该类的构造函数中

D. 一个类中能含有多个子对象作其成员

【结果分析】

子对象不可以是自身类的对象。

(15)对new运算符的下列描述中,( B )是错误的。

A. 它可以动态创建对象和对象数组

B. 用它创建对象数组时必须指定初始值

C. 用它创建对象时要调用构造函数

D. 用它创建的对象数组可以使用运算符delete来一次释放

【结果分析】

使用运算符new创建对象数组的格式如下:

new <类型说明符> [<算术表达式>]

其中,<算术表达式>给出数组的大小,后面不能再跟构造函数参数,所以用它创建对象数组时不能指定初始值。

(16)对delete运算符的下列描述中,( D )是错误的。

A. 用它可以释放用new运算符创建的对象和对象数组

B. 用它释放一个对象时,它作用于一个new所返回的指针

C. 用它释放一个对象数组时,它作用的指针名前须加下标运算符[]

D. 用它可一次释放用new运算符创建的多个对象

【结果分析】

用delete一次只能释放用new创建的1个对象,但可释放一个对象数组。(17)关于静态数据成员,下面叙述不正确的是( C )。

A. 使用静态数据成员,实际上是为了消除全局变量

B. 可以使用“对象名.静态成员”或者“类名∷静态成员”来访问静态数据成员

C. 静态数据成员只能在静态成员函数中引用

D. 所有对象的静态数据成员占用同一内存单元

【结果分析】

静态数据成员可以在静态成员函数中引用,也可以在非静态成员函数中引用。(18)对静态数据成员的不正确描述是( CD )。

A. 静态成员不属于对象,是类的共享成员

B. 静态数据成员要在类外定义和初始化

C. 调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针

D. 只有静态成员函数可以操作静态数据成员

【结果分析】

this指针是一个局部量,局部于某个对象,而静态成员函数是属于整个类而不是某个对象,它没有this指针。静态成员函数和非静态成员函数均可操作静态数据成员。

(19)下面的选项中,静态成员函数不能直接访问的是( D )。

A. 静态数据成员

B. 静态成员函数

C. 类以外的函数和数据

D. 非静态数据成员

【结果分析】

由于静态成员函数没有this指针,它只能直接访问该类的静态数据成员、静态成员函数和类以外的函数和数据,访问类中的非静态数据成员必须通过参数传递方式得到对象名,然后通过对象名来访问。

(20)在类的定义中,引入友元的原因是( A )。

A. 提高效率

B. 深化使用类的封装性

C. 提高程序的可读性

D. 提高数据的隐蔽性

【结果分析】

友元的作用主要是为了提高效率和方便编程,但友元破坏了类的封装性和隐蔽性,使用时要权衡利弊。

(21)友元类的声明方法是( A )。

A. friend class<类名>;

B. youyuan class<类名>;

C. class friend<类名>;

D. friends class<类名>;(22)下面对友元的错误描述是( D )。

A. 关键字friend用于声明友元

B. 一个类中的成员函数可以是另一个类的友元

C. 友元函数访问对象的成员不受访问特性影响

D. 友元函数通过this指针访问对象成员

【结果分析】

友元函数是一个放在类中的普通函数,它没有this指针。

(23)下面选项中,( C )不是类的成员函数。

A. 构造函数

B. 析构函数

C. 友元函数

D. 拷贝构造函数

三、简答题

(1)类与对象有什么关系?

【问题解答】

类是一种用户自己定义的数据类型,和其他数据类型不同的是,组成这种类型的不仅可以有数据,而且可以有对数据进行操作的函数。程序员可以使用这个新类型在程序中声明新的变量,具有类类型的变量称为对象。创建对象时,类被用做样板,对象称为类的实例。

(2)类定义的一般形式是什么?其成员有哪几种访问权限?

【问题解答】

定义类一般形式为:

class类名{

public:

<公有数据和函数>

protected:

<保护数据和函数>

private:

<私有数据和函数>

};

访问权限共有3种:分别是公有(public)、保护(protected)和私有(private)。(3)类的实例化是指创建类的对象还是定义类?

【问题解答】

指创建类的对象。

(4)什么是this指针?它的主要作用是什么?

【问题解答】

this指针是C++语言为成员函数提供的一个隐含对象指针,它不能被显式声明。this指针是一个局部量,局部于某个对象。不同的对象调用同一个成员函数时,编译器根据this指针来确定应该引用哪一个对象的数据成员。

(5)什么叫做拷贝构造函数?拷贝构造函数何时被调用?

【问题解答】

拷贝构造函数是一种特殊的构造函数,它的作用是用一个已经存在的对象去初始化另一个对象。为了保证所引用的对象不被修改,通常把引用参数声明为const 参数。

在以下3种情况下,拷贝构造函数都会被自动调用:

◆当用类的一个对象去初始化该类的另一个对象时;

◆当函数的形参是类的对象,进行形参和实参结合时;

◆当函数的返回值是类的对象,函数执行完成返回调用者时。

四、程序分析题(写出程序的输出结果,并分析结果)(1)

#include

using namespace std;

class Test

{

private:

int num;

public:

Test();// 默认构造函数

Test(int n); // 带一个参数构造函数

};

Test∷Test()

{

cout<<"Init defa"<

num=0;

}

Test∷Test(int n)

{

cout<<"Init"<<" "<

num=n;

}

int main()

{

Test x[2];// 语句1

Test y(15); // 语句2

return 0;

}

【输出结果】

Init defa

Init defa

Init 15

【问题分析】

本题主要考查构造函数的调用时机和构造函数的匹配问题。

【要点提示】

构造函数在创建对象时被自动调用,具体调用哪个构造函数将由编译系统根据重载函数的匹配原则来确定。

【结果分析】

① 程序声明了2个对象x和y,类中有2个构造函数。

② 程序首先执行语句1,创建对象x,调用默认构造函数。由于对象x是对象数组,每个数组元素被创建时都要调用构造函数,所以默认构造函数被调用了2次,输出第1、2行结果。程序接着执行语句2,创建对象y,调用带一个参数的构造函数,输出第3行结果。

(2)

#include

using namespace std;

class Xx

{

private:

int num;

public:

Xx(int x){num=x;} // 构造函数

~Xx(){cout<<"dst "<

};

int main()

{

Xx w(5); // 语句1

cout<<"Exit main"<

return 0;

}

【输出结果】

Exit main

dst 5

【问题分析】

本题主要考查析构函数的调用时机。

【要点提示】

析构函数在释放对象时被自动调用。

【结果分析】

① 程序声明了一个对象w。

② 程序首先执行语句1,创建对象w,调用构造函数,num得到初值5。程序接着执行语句2,输出第1行结果。当程序结束时,释放对象w,析构函数被调用,输出第2行结果。

(3)将例3.10中的Whole类如下修改,其他部分不变,写出输出结果。class Whole

{

public:

Whole(int i); // Whole的有参构造函数Whole(){}; // Whole的无参构造函数

~Whole(); // Whole的析构函数private:

Part p1;// 子对象1

Part p2;// 子对象2

Part p3;// 子对象3

};

Whole∷Whole(int i):p2(i),p1(){

cout<<"Constructor of Whole"<

}

Whole∷~Whole()

{

cout<<"Destructor of Whole"<

}

【输出结果】

Default constructor of Part Constructor of Part,3

Default constructor of Part Constructor of Whole

Destructor of Whole

Destructor of Part,0

Destructor of Part,3

Destructor of Part,0

【问题分析】

本题主要考查子对象初始化的方法和含有子对象时构造函数和析构函数的调用顺序。

【要点提示】

◆当建立X类的对象时,先调用子对象的构造函数,初始化子对象,然后才执行X类的构造函数,初始化X类中的其他成员。

◆对子对象构造函数的调用顺序取决于这些子对象在类中的说明顺序,与它们在成员初始化列表中给出的顺序无关。

◆如果X类的构造函数没有给出成员初始化列表,表明子对象将使用默认构造函数进行初始化。

◆析构函数的调用顺序与构造函数的调用顺序正好相反。

【结果分析】

程序的Whole类中出现了类Part的3个对象p1、p2和p3,作为该类的数据成员,则p1、p2和p3被称为子对象。当建立Whole类的对象w时,子对象p1、p2和p3被建立,相应的构造函数被执行。由于p1在Whole类中先说明,所以先执行它所使用的构造函数,即类Part的默认构造函数,接着p2执行它所使用的有参构造函数,紧接着初始化p3,由于Whole类构造函数的成员初始化列表中没有子对象p3进行初始化的选项,所以执行类Part的默认构造函数,当所有子对象被构造完之后,对象w的构造函数才被执行,从而得到前4行输出结果,而后4行是执行相应析构函数的输出结果。

(4)

#include

using namespace std;

class Book

{

public:

Book(int w);

static int sumnum;

private:

面向对象方法题库1-1-9

面向对象方法题库1- 1-9

问题: [单选]用例(usecase)用来描述系统对事件做出响应时所采取的行动。用例之间是具有相关性的。在一个“订单输入子系筑”中,创建新订单和更新订单都需要核查用户账号是否正确。用例“创建新订单”、“更新订单”与用例“核查客户账号”之间是()关系。 A.包含(includE. B.扩展(extenD. C.分类(classification) D.聚集(aggregation) 用例是在系统中执行的一系列动作,这些动作将生成特定参与者可见的价值结果。它确定了一个和系统参与者进行交互,并可由系统执行的动作序列。用例模型描述的是外部执行者(actor)所理解的系统功能。用例模型用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识。 两个用例之间的关系主要有两种情况:一种是用于重用的包含关系,用构造型include表示;另一种是用于分离出不同行为的扩展,用构造型extend表示。 ①包含关系:当可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个构件来实现某一个用例的部分功能是很重要的事时,应该使用包含关系来表示它们。 ②扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种事

情,可以断定将这个用例分为一个主用例和一个或多个辅用例描述可能更加清晰。

问题: [单选]对于违反里氏替换原则的两个类A和B,可以采用的候选解决方案是() A.尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类对象进行编程 B.创建一个新的抽象类C,作为两个具体类的超类,将A和B共同的行为移动到C中,从而解决A和B 行为不完全一致的问题 C.将B到A的继承关系改成组合关系 D.区分是Is-a还是Has-a。如果是Is-a,可以使用继承关系,如果是Has-a,应该改成组合或聚合关系 里氏替换原则是面向对象设计原则之一,由BarbaraLiskov提出,其基本思想是,一个软件实体如果使用的是一个基类对象,那么一定适用于其子类对象,而且觉察不出基类对象和子类对象的区别,即把基类都替换成它的子类,程序的行为没有变化。反过来则不一定成立,如果一个软件实体使用的是一个子类对象,那么它不一定适用于基类对象。 在运用里氏替换原则时,尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类对象进行编程。由于子类继承基类并实现其中的方法,程序运行时,子类对象可以替换基类对象,如果需要对类的行为进行修改,可以扩展基类,增加新的子类,而无须修改调用该基类对象的代码。

第4章-Java语言与面向对象作业习题与答案

第4章 Java语言与面向对象作业习题与答案 一、简答题 1.什么是对象?什么是类? 对象是一种抽象数据类型。它包含了事物的静态特征(属性)和动态特征(行为)两大特征。 类是一组同种对象的集合与抽象。即是具有相同属性和方法的一组对象集合。 2.Java语言的单继承是指什么? 一个类可以派生出多个子类,但子类只允许有一个父类,而不允许存在多个父类。 3.在一个共有类中的数据成员及方法成员的访问控制符为缺省,则这个类可供什么样的包引用? 当一个类的访问控制符为public共有时,表明这个类作为整体对其它类是可见和可引用的;但其数据成员和方法成员访问控制符为缺省时,它们只能被包中类(含当前类)引用。 4.抽象类的用途 (1)设计在更高的层次上进行,不考虑具体对象,从而大大简化了处理问题的复杂性; (2)设计出的类也具有更加良好的可扩展性。 5.什么是非静态的成员变量? 非静态成员即为实例成员变量(没有加static修饰的变量)。 6.异常Exception和错误Error有什么不同?Java如何处理它们? 答:错误通常是指程序本身存在非法情形,常常是因为代码存在问题而引起的,如造成系统崩溃、虚拟机粗错、动态失败等,这一类错误无法恢复或不可能捕获,并将导致应用程序中断。 异常表示另外一种“非同寻常”的错误。这种错误通常是不可预测,但可以被捕获且可以恢复。常见的异常情况包括存不足、找不到所需文件等。 对于错误,编程人员可以通过对程序进行更仔细的检查,以避免这种错误。 对于异常,可以使用捕获机制进行捕获,再编写出相应的处理程序。 7.简单述Java的异常处理机制。 答:Java采取“抛出—捕获”的方式,一旦一个异常想象产生,Runnable环境和应用程序会抛出各种标准类型和自己定义的异常,系统就可以捕获这些异常,并一定有相应的机制来处理它,确保不会产生司机、死循环或其它对操作系统的损害,从而保证了整个程序运行的安全性。 8.简单述throw语句和throws关键字之间的差别。 答:throw语句是在一个方法中用来直接抛出异常对象,其格式是: throw 异常对象; throws关键字是用一个方法声明首部,用来指出这个方法中可能产生若干种异常,其格式:[方法修饰符] 返回类型方法名(参数表)throws 异常类型表 { /*方法体*/ } 二、填空题 1.所有Java应用程序都必须包含的一个类方法是 main() 。 2.面向对象程序设计语言的三种重要特性是封装性、继承性和多态性。

面向对象试题(标准答案)

CoreJavaOOP考试题 考试时间:90分钟 考试总分:100分 一、选择题(不定项选择)(22*4=88) 1. 类A,B的定义如下: class A { private int a = 100; A() { System.out.print("A()"); System.out.println(a); } } class B extends A { private int a = 200; B() { System.out.print("B()"); System.out.println(a); } } 运行下面的代码: new B(); 输出的结果是:(A )。 A. A() 100 B() 200 B. A() 200 B() 200 C. B() 200 A() 100 D. B() 200 A() 200

2.下列说法正确的是(D ) A.所有类都必须定义构造方法(构造器) B.构造方法必须初始化类的所有数据成员 C.子类定义了构造器后,不再调用父类的构造器 D.构造方法可以访问类的非静态成员 3.在Java中,哪个关键字使类不能派生子类?, (A ) A : final B : public C : private D : native 4.class Base{ static void test(){ System.out.println(“Base.test()”); } } public class Child extends Base{ static void test(){ System.out.println(“Child.test()”); } public static void main(String[] args){ Base base = new Child(); Child child = new Child(); base.test(); child.test(); } } 程序运行的结果是( C ) A.Child.test() Child.test() B.Child.test() Base.test() C.Base.test() Child.test() D.Base.test() Base.test()

面向对象期末考试答案

一、填空(15分) 1、类之间的静态联系称作关联。 ?在实例化后,由类产生对象,链是关联的实例。 ?在系统实现时,关联采用对象的属性来实现。 2、用例图用于建立需求模型,描述用户的需求。对象图是面向对象分析中的基本模型,属于静态结构模型。 3、顺序图(时序图)、通信图、活动图、状态图用于描述系统的行为方面的特征,属于动态结构模型。 4、时序图构成:参与者、相互协作的对象、对象的生命线、参与者与对象之间发送的消息、执行规约 5、表示 [可见性] 属性名[:类型][ =初始值] 可见性分为+表示:(公有的)、#表示:(受保护的)、-表示:(私有的)、~(包,只有在同一包中声明的类能够使用这一属性)。 二、名词解释(15分) 1、面向对象方法:是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。 2、类:是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作务两个主要部分。类的作用是用来创建对象,对象是类的一个实例。 3、抽象:指从事物中舍弃个别的、非本质的、与问题域无关的特征,而抽取共同的、本质特征的、相关的做法。 4、多态性:在具有继承关系的类层次结构中可以定义同名的操作或属性,但这些属性或操作具有不同的含义,即具有不同的数据类型或表现出不同的行为。(“同名不同参”或“同名不同类”) 5、OOA模型:就是通过面向对象的分析所建立的系统分析模型。 用况:一个用况是对参与者使用系统的一项功能的描述,是一组动作序列的描述,是一项请求与响应。(

三、简答(45分) 1、继承和泛化关系 特殊类拥有其一般类的全部属性与操作,称作特殊类对一般类的继承。 一般类对特殊类的抽象关系叫泛化关系(简称泛化)。 2、聚合与组合有区别,请说明他们间的区别,并指出下图中哪图是聚合? 聚合刻画了现实事物之间的构成关系,体现“整体——部分”关系。而关联没有组成关系或拥有关系。如例题中的c图 3、简述下图中体现的面向对象的基本思想

面向对象面试题

面向对象面试题 1、什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可以自己完成自己的功能,而不是像C那样分成一个个函数; 现在纯正的OO语言主要是java和C#,C++也支持OO,C是面向过程的。 2、简述private、protected、public、internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 当前程序集内可以访问。 3、https://www.docsj.com/doc/9718363839.html,中的五个主要对象 Connection:主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在https://www.docsj.com/doc/9718363839.html, 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。 Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连结到数据源。 DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Comm and 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command 对象上,并提供了许多配合DataSet 使用的功能。 DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是https://www.docsj.com/doc/9718363839.html, 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。 DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。 https://www.docsj.com/doc/9718363839.html, 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来

面向对象程序设计(JAVA)期末考试试卷(A卷)

面向对象程序设计 (J A V A)期末考试试卷 (A卷) -CAL-FENGHAI.-(YICAI)-Company One1

课程代码: 座位号: 新疆大学20 -20 学年度第二学期期末考试 《面向对象程序设计》试卷 姓名: 学号: 专业: 学院: 班级: 20 年 月 日 一、单选题(10小题,共10分) 1.下列 选项中,用于在定义子类时声明父类名的关键字是 【 】 A .interface B . package C . extends D . class 2.在以下哪种情况下可以获得缺省构造器 【 】 A .当作任何类的定义时 B .当类没有其它构造器时 C .当定义至少一个构造器的时 D .从不需要 3.如果局部变量和成员变量同名,如何在局部变量作用域内引用成员变量【 】 A .不能引用,必须改名,使它们的名称不相同 B .在成员变量前加this ,使用this 访问该成员变量 C .在成员变量前加super ,使用super 访问该成员变量 D .不影响,系统可以自己区分 4.在异常处理中,如释放资源、关闭文件、关闭数据库等由哪个子句来完成【 】 A .try 子句 B .catch 子句 C .finally 子句 D .throw 子句 5.下面哪个流类属于面向字符的输入流 【 】 A .BufferedWriter B .FileInputStream C .ObjectInputStream D .InputStreamReader 6.在Java 中,由Java 编译器自动导入,而无需在程序中用import 导入的包是 【 】。 A .java.applet B .java.awt C .java.util D .https://www.docsj.com/doc/9718363839.html,ng

面向对象分析与及设计习题及答案

面向对象分析与及设计习题及答案 一、单项选择题 1.到20世纪末,面向对象软件工程已经逐渐发展成熟,特别是(D)的 形成和广泛使用,采用面向对象分析与编程的软件开发方法已成为软件开发的主流方法。 A. Simula67语言 B. Smalltalk语言 C. Java语言 D. 统一建模语言(UML)的标准 2. 面向对象的运动产生了多种面向对象的语言, 其中(C)是一种混合性面向对象语言, 既支持面向过程的程序设计方法,又支持面向对象的程序设计方法,有广泛应用的基础和丰富开发环境的支持,因而使面向对象的程序设计能得到很快普及。 A. Smalltalk B. Eiffel C. C++ D. Java 3.下列不属于面向对象技术的基本特征的是(B)。 A. 封装性 B. 模块性 C. 多态性 D. 继承性 4. 面向对象程序设计将描述事物的数据与(C) 封装在一起,作为一个相互依存、不可分割的整体来处理。 A. 信息 B. 数据隐藏 C. 对数据的操作 D. 数据抽象 5. 关于面向对象方法的优点,下列不正确的叙述是(C)。 A. 与人类习惯的思维方法比较一致 B. 可重用性好 C. 以数据操作为中心 D.可维护性好 6. (D)是从用户使用系统的角度描述系统功能的图形表达方法。 A. 类图 B. 对象图 C. 序列图 D. 用例图 7. (C) 是表达系统类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作图 和其他图的基础。 A.对象图 B. 组件图 C. 类图 D. 配置图 8.(D)描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对象之 间传递消息的时间顺序。 A.对象图 B. 协作图 C. 状态图 D. 序列图 9.(D)就是用于表示构成分布式系统的节点集和节点之间的联系的图示,它可以表示系统 中软件和硬件的物理架构。 A. 组件图 B. 协作图 C. 状态图 D. 配置图 10. 使用UML进行关系数据库的(B)时,需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表(Table)、视图(View)等。 A. 业务Use Case模型设计 B. 逻辑数据模型设计 C. 物理数据模型设计 C. 物理实现设计 11.一个设计得好的OO系统具有(B) A. 低内聚、低耦合的特征 B. 高内聚、低耦合的特征 C. 高内聚、高耦合的特征 D. 低内聚、高耦合的特征 12.下面()不是UML的基本构成元素。(A) A. 控制语言 B. 基本构造块 C. 规则 D. 公共机制

java面向对象试卷及答案

java面向对象程序设计 系班级姓名成绩得分评卷人 一、填空题(每空2分,共20分) 1.Java源程序的扩展名是,经过编译后的程序的扩展名是。2.Socket通常也称为,用于描述和。3.线程的优先级在至之间,数值越大 4.构造方法是一种特殊的成员方法,构造方法名与相同 5.Java语言只允许单继承,指每个类只能有一个。 二、选择题(每题2分,共50分) 1.下列哪个概念是面向对象和面向过程程序设计所共有的() A、继承 B、流程控制 C、抽象 D、封装 2.以下关于执行Java小程序的论述错误的是:() A、可以通过浏览器调用嵌入了Java小程序的HTML文档 B、可以通过appletviewer.exe调用嵌入了Java小程序的HTML文档 C、可以通过java.exe调用嵌入了Java小程序的HTML文档 D、可以在Java集成开发环境中调用嵌入了Java小程序HTML文档 3.符合对象和类关系的是:() A、人和老虎 B、书和汽车 C、楼和土地 D、松树和植物 4.关于选择结构下列哪个说法正确?() A.if语句和else语句必须成对出现 B.if语句可以没有else语句对应 C.一个if语句只能有一个else if语句与之对应 D.else if结构中必须有default语句 5.while循环和do…while循环的区别是:()

A.没有区别,这两个结构任何情况下效果一样 B.while循环比do…while循环执行效率高 C.do…while循环执行次数可能为0 D.while循环执行次数可能为0 6.关于for循环和while循环的说法哪个正确?() A.while循环先判断后执行,for循环先执行后判断。 B.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果C.两种循环任何时候都不可以替换 D.两种循环结构中都必须有循环体,循环体不能为空 7.下列修饰符中与访问控制无关的是() A.private B.public C.protected D.final 8.方法内的形参:() A.必须定义多个形参B.可以没有 C.至少有一个D.只能是简单变量 9.throws的作用:() A.表示方法可能会抛出例外 B.表示后面是方法的输出量 C.方法的标志,每个方法都必须有 D.没有意义 10.在Java语言中,整型常量123占用的存储字节数是:()A.1B.2 C.4 D.8 11.关于对象成员占用内存的说法哪个正确?() A.同一个类的对象共用同一段内存 B、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间C.对象的方法不占用内存 D.以上都不对 12.return语句:()

面向对象期末测试题(带答案).doc

济南大学2009~2010 学年第二学期课程考试试卷 课 程 java 面向对象程序设计 授课教师 考试时间 考试班级 学 号 姓 名 … … …… …… …………………………装……………… …………订………………… …… …线 …… …… …… … …… …… …… …… …

C.一个if语句只能有一个else if语句与之对应 D.else if结构中必须有default语句 5.while循环和do…while循环的区别是:(D) A.没有区别,这两个结构任何情况下效果一样 B.while循环比do…while循环执行效率高 C.do…while循环执行次数可能为0 D.while循环执行次数可能为0 6.关于for循环和while循环的说法哪个正确?(B) A.while循环先判断后执行,for循环先执行后判断。 B.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果C.两种循环任何时候都不可以替换 D.两种循环结构中都必须有循环体,循环体不能为空 7.下列修饰符中与访问控制无关的是(D) A.private B.public C.protected D.final 8.方法内的形参:(B) A.必须定义多个形参B.可以没有 C.至少有一个D.只能是简单变量 9.throws的作用:(A) A.表示方法可能会抛出例外 B.表示后面是方法的输出量 C.方法的标志,每个方法都必须有 D.没有意义 10.在Java语言中,整型常量123占用的存储字节数是:(C)A.1B.2 C.4 D.8 11.关于对象成员占用内存的说法哪个正确?(B) A.同一个类的对象共用同一段内存 B、同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间

Java面向对象测试试题(经典)

《使用Java实现面向对象编程》阶段测试-笔试试卷 一、选择题(共25题,每题4分,满分100分) 1) 在Java类中,使用以下()声明语句来定义公有的int型常量MAX。 A. public int MAX = 100; B. final int MAX = 100; C. public static int MAX = 100; D. public static final int MAX = 100; 2) 在Java中,下列关于方法重载的说法中错误的是()。 A. 方法重载要求方法名称必须相同 B. 重载方法的参数列表必须不一致 C. 重载方法的返回类型必须一致 D. 一个方法在所属的类中只能被重载一次 3) 给定Java代码如下所示,在横线处新增下列()方法,是对cal方法的重载。 public class Test{ public void cal(int x, int y, int z) {} } A. public int cal(int x, int y, float z){ return 0; } B. public int cal(int x, int y, int z){ return 0; } C. public void cal(int x, int z){ } D. public void cal(int z, int y, int x){ } 4) 在Java中,下面对于构造函数的描述正确的是()。 A. 类必须显式定义构造函数 B. 构造函数的返回类型是void C. 构造函数和类有相同的名称,并且不能带任何参数 D. 一个类可以定义多个构造函数

《面向对象程序设计C 》期末考试试卷

《面向对象程序设计C++》期末考试试卷 一、选择题(每小题3分,共48分。) 01、下列关于C++函数的叙述中,正确的是( C )。 A)每个函数至少要具有一个参数B)每个函数都必须返回一个值 C)函数在被调用之前必须先声明D)函数不能自己调用自己 02、下列关于类和对象的叙述中,错误的是( A )。 A)一个类只能有一个对象B)对象是类的具体实例 C)类是对某一类对象的抽象D)类和对象的关系是一种数据类型与变量的关系 03、在C++中,用于实现运行时多态性的是( D )。 A)内联函数B)重载函数C)模板函数D)虚函数 04、下列关于运算符重载的叙述中,正确的是( B )。 A)通过运算符重载,可以定义新的运算符B)有的运算符只能作为成员函数重载 C)若重载运算符+,则相应的运算符函数名是+ D)重载二元运算符时,必须声明两个形参 05、对于语句cout<

面向对象编程练习题库test

面向对象编程练习题库 t e s t Document serial number【KKGB-LBS98YT-BS8CB-BSUT-BST108】

面向对象编程练习题 专题1 初识Java 一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是()、()、()。 2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置Path为()、classpath 为()。 3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展 名为()。 4.如果Java源文件中有多个类,那么只能有一个类是()类。 二、选择题 1.作为Java应用程序入口的main方法,其声明格式是() A.public static int main(String args[]) B.public static void main(String args[]) C.public void main(String args[]) D.public int main(String args[]) 2.下面命令正确的是() A.java B.java AppFirst C.java D.javac AppFirst 3.设有一个Java小程序,源程序名为,其HTML文件为,则运行该小程序的命令为 () A.java FirstApplet B.javac C.appletviewer D.appletviewer 4.JDK安装完成后,主要的命令如javac、java等,都存放在根目录的()文件夹下。A.bin B.jre C.include D.doc 5.Java语言是一种语言。 A.机器B.汇编C.面向过程的D.面向对 象的 6、Java程序的最基本组成单位是( )。

面向对象考试题

第五章考试题 一、选择题:(每题3分,共20题) 1.下面关于类的说法错误的一项是()。 A、类属于Java语言中的复合数据类型 B、对象是Java语言 中的基本结构单位 C、类是同种对象的集合和抽象 D、类就是对象 2.如下所示代码: public class Test05_01{ private float a; public static void m ( ){ } } 如何使成员变量a被方法m( )访问()。 A、将private float a改为public float a B、将private float a改为static float a C、将private float a改为protected float a D、将private float a改为float a 3.下面关于类的说法有误的一项是()。 A、类就是对象 B、类是同种对象的集合和 抽象 C、类属于Java语言中的复合数据类型 D、对象是Java语言 中的基本结构单位

4.下列哪种类成员修饰符修饰的变量只能在本类中被访问()。 A、protected B、default C、private D、public 5.下面关于方法的说法不正确的一项是()。 A、类的私有方法不能被其他类直接访问。 B、Java中的构造方法名必须和类名相同。 C、方法体是对方法的实现,包括变量声明和合法语句。 D、如果一个类定义了构造方法,也可以用该类的默认构造方法。 6.下列程序的运行结果是()。 public class Test05_02 extends x{ int ab(){ static int a = 10; a++; System.out.println(a); } public static void main(String[] args) { Test05_02 b = new Test05_02 (); b.ab(); } } A、10 B、编译错误 C、11 D、运行成功,但不输出

2_面向对象基础测试题和答案

共40道选择题,每题2.5分。多选题有错则全错,全对才满分. 面向对象部分测试题 1.下面描述函数重写错误的是C A.?要有子类继承或实现 ?B.?子类方法的权限必须大于等于父类的权限 C. 父类中被private权限修饰的方法可以被子类重写 D.?子类重写接口中的抽象方法,子类的方法权限必须是public的 2.关于封装下面介绍错误的是(D )。 A. 封装将变化隔离 B.?封装提高重用性。 C.?封装安全性 ?D. 只有被private修饰才叫做封装 3.试图编译运行下面的代码会发生什么情况D public class MyClass{ static int i; publicstaticvoid main(String[]args){System.out.println(i); } } ?A.?错误,变量i没有被初始化 ?B. 输出null C.?输出1 ?D. 输出0 4.在Java中,下面对于构造函数的描述正确的是( D)。 A. 类必须显式定义构造函数 B.构造函数的返回类型是void ?C.?构造函数和类有相同的名称,并且不能带任何参数

D.一个类可以定义多个构造函数 5.下面Java代码的运行结果是(C)。 class Penguin { ?private String name=null; // 名字 privateint health=0;//健康值 private String sex=null; //性别 publicvoid Penguin(){//是一般方法,不是构造方法 health = 10; ??sex = "雄"; ??System.out.println("执行构造方法。"); ?} public voidprint() { ??System.out.println("企鹅的名字是" +name + ?",健康值是"+ health + ",性别是"+ sex+"。"); ?} public staticvoidmain(String[] args){ ?Penguin pgn= new Penguin(); pgn.print(); } } A. 企鹅的名字是null,健康值是10,性别是雄。 B.?执行构造方法。 企鹅的名字是null,健康值是0,性别是null。 ?C.?企鹅的名字是null,健康值是0,性别是null。 D.?执行构造方法。 ?企鹅的名字是null,健康值是10,性别是雄。 6.class A { public int i = 10;?} class B extends A{

《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案

一、单选题 1.在下列概念中,Java语言只保留了D A.运算符重载B.结构和联合C.指针D.方法重载 2.下列类定义中,不正确的是B A.class x { .... } B.static class x implements y1,y2 { .... } C.public class x extends Applet { .... } D.class x extends y { .... } 3.下列语句序列执行后,k 的值是B int m=3, n=6, k=0; while( (m++) < (- - n) ) ++k; i++ 先把i的初值赋给表达式(i++),作为表达式(i++)的值,然后i自增 1作为i的值。 如i=1,则表达式(i++)的值等于1,而i的值变为2。 ++i i先自增1,再把自增后的值赋给表达式(++i)。 如i=1,则表达式(++i)的值等于2,i的值也为2, A.0 B.1 C.2 D.3 4.设i、j为int型变量名,a为int型数组名,以下选项中,正确的赋值语句是A A.a[0] = 7; B.i = i + 2 C.i++ - --j; D.a(0) = 66; 5.Java语言的类间的继承关系是B A.多重的B.单重的C.线程的D.不能继承 6.下列语句序列执行后,k 的值是C int i=10, j=18, k=30; switch( j - i ) { case 8 : k++; case 9 : k+=2; case 10: k+=3; default : k/=j; } A.31 B.3 C.2 D.33 7.设有定义float x=3.5f, y=4.6f, z=5.7f;则以下的表达式中,值为true的是C A.x > y || x > z B.z > ( y + x ) C.x != y D.x < y & ! ( x < z )

面向对象程序设计考试题库

面向对象程序设计期末综合练习一(单选题) 单选题 1. C++源程序文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. lik 2. 由C++源程序文件编译而成的目标文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. lik 3. 由C++目标文件连接而成的可执行文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. lik 4. 编写C++程序一般需经过的几个步骤依次是( )。 A. 编译、编辑、连接、调试 B. 编辑、编译、连接、调试 C. 编译、调试、编辑、连接 D. 编辑、调试、编辑、连接 5. 以下标识符中不全是保留字的是( )。 A. case for int B. default then while C. bool class long D. goto return char 6. 能作为C++程序的基本单位是( )。 A. 字符 B. 语句 C. 函数 D. 源程序文件 7. 程序中主函数的名字为( )。 A. main B. MAIN C. Main D. 任意标识符 8. C++程序的基本模块为( )。 A. 表达式 B. 标识符 C. 语句 D. 函数 9. 可用作C++语言用户标识符的一组标识符是( )。 A. void define +WORD B. a3_b3 _123 YN C. for -abc Case D. 2a DO sizeof 10. 存储以下数据,占用存储字节最多的是( )。 A. 0 B. …0? C. “0” D. 0.0 11. 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。 A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车 12. 设”int a=12;”,则执行完语句”a+=a*a;”后,a 的值是( )。 A. 12 B. 144 C. 156 D. 288 13. 假设在程序中 a 、b 、c 均被定义成整型,所赋的值都大于1,则下列能正确表示代数式abc 1的表达式是( )。 A. 1.0/a*b*c B. 1/(a*b*c) C. 1/a/b/(float)c D. 1.0/a/b/c 14. 设”int a=15,b=26;”,则”cout<<(a,b);”的输出结果是( )。 A. 15 B. 26,15 C. 15,26 D. 26

面向对象基础测试题和答案

共40 道选择题,每题 2.5 分。多选题有错则全错,全对才满分. 面向对象部分测试题 1. 下面描述函数重写错误的是 C A. 要有子类继承或实现 B. 子类方法的权限必须大于等于父类的权限 C. 父类中被private 权限修饰的方法可以被子类重写 D. 子类重写接口中的抽象方法,子类的方法权限必须是public 的 2. 关于封装下面介绍错误的是( D )。 A. 封装将变化隔离 B. 封装提高重用性。 C. 封装安全性 D. 只有被private 修饰才叫做封装 3. 试图编译运行下面的代码会发生什么情况 D public class MyClass{ static int i; public static void main(String[] args){ System.out.println(i); } } A. 错误,变量i 没有被初始化 B. 输出null C. 输出1 D. 输出0 4. 在Java 中,下面对于构造函数的描述正确的是(D)。 A. 类必须显式定义构造函数 B. 构造函数的返回类型是void C. 构造函数和类有相同的名称,并且不能带任何参数

D. 一个类可以定义多个构造函数 5. 下面Java 代码的运行结果是( C )。 class Penguin { private String name=null; // 名字 private int health=0; // 健康值 private String sex=null; // 性别 public void Penguin() { //是一般方法,不是构造方法health = 10; sex = " 雄"; System.out.println(" 执行构造方法。"); } public void print() { System.out.println(" 企鹅的名字是" + name + " ,健康值是" + health + " ,性别是" + sex+ " 。"); } public static void main(String[] args) { Penguin pgn = new Penguin(); pgn.print(); } } A. 企鹅的名字是null ,健康值是10 ,性别是雄。 B. 执行构造方法。 企鹅的名字是null ,健康值是0 ,性别是null 。 C. 企鹅的名字是null ,健康值是0 ,性别是null 。 D. 执行构造方法。 企鹅的名字是null ,健康值是10 ,性别是雄。 6. class A { public int i = 10; }

面向对象的与设计期末考试试卷(F卷)

面向对象的分析与设计期末考试试卷(F卷)一、选择题(30分) 说明:每题2分,只有1个正确答案,请将正确答案填写在下面表格中。 1. 一个设计得好的面向对象系统具有()特征。 A 低内聚、低耦合 B 高内聚、低耦合 C 高内聚、高耦合 D 低内聚、高耦合2.构成对象的两个主要因素是()。 A 属性和服务 B 标识和内容 C 继承和多态 D 消息和封装 3. 下面描述中()不是使用软件模型的目的。 A 可以更好地理解问题 B 可以更早地发现错误或疏漏的地方 C 可以为最后代码的生成提供依据 D 在开发过程中使用面向对象方法 4. 下列事物中一般不是目标系统的外部参与者的是()。 A 人 B 外部设备 C 外部系统 D 数据存储 5. 下面()可以描述一个用例中多个对象之间的相互协作关系以及协作过程的行为次序。 A 交互图 B 状态图 C 对象图 D 用例图 6. 统一过程(或称RUP)所提出的迭代开发过程是()。 A 一种结构化开发方法,该方法给出了功能分解有具体步骤 B 一种管理软件开发的过程复杂性和对变更进行规划的技术 C 一种自顶向下的开发过程,且开发过程没有使用数据流图 D 是RUP中最重要的特点 7. 下列描述中正确的是()。 A 消息可以由被动对象发送到主动对象 B 状态图中,动作可以被中断而活动不能被中断 C 构件图中,一个构件和一个接口之间只能存在实现关系 D 状态图不适合于描述跨多个用例的单个对象的行为,而适合描述多个对象之间的行为协作 8. 根据下面的代码,可以确定类A与类B之间存在()关系。 public class A { private B theB; public void aMethod(){ theB.doSomthing(); } } A 关联 B 泛化 C 实现 D 包含 9. 面向对象的特点主要概括为()。 A 可分解性、可组合性、可分类性 B 继承性、封装性、多态性 C 抽象性、继承性、封装性、多态性 D 封装性、易维护性、可扩展性、可重用性 10.关于面向对象分析与设计的叙述中正确的是()。

面向对象笔试题

一、填空题 1 Java中一个类可以有个父类。 2 如果一个类的声明中没有使用extends关键字,这个类被系统默认为是类的子类。 3 子类自然地继承了其父类中不是的成员变量作为自己的成员变量。 4 当子类中定义的成员变量和父类中的成员变量同名时,子类的成员变量了父类的成员变量。 5 子类通过成员变量的隐藏和方法的可以把父类的状态和行为改变为自身的状态和行为。 6 对于重写或继承的方法,Java运行时系统根据调用方法的的类型来选择调用哪个方法。 7 对于子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用的方法。 8 对于子类创建的一个对象,如果子类继承了父类的方法,未重写,则运行时调用______的方法。 9 在Java语言中多态性体现在由方法重载实现的静态多态性和实现的动态多态性。 10 类不能被继承,即不能有子类。 11 类不能创建对象,必须产生其子类,由子类创建对象。 12 如果一个方法被修饰为方法,则这个方法不能被重写。 13 对于方法,只允许声明,而不允许实现。 14 如果一个方法被修饰为final方法,则这个方法不能。 15 如果一个类是一个abstract类的子类,它必须具体实现的abstract方法。 16 局部变量的名字与成员变量的名字相同,若想在该方法内使用成员变量,必须使用关键字。 17 在关键字中能代表当前类或对象本身的是。 18 如果在子类中想使用被子类隐藏的父类的成员变量或方法可以使用关键字。 19 子类如果想用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字____ 来表示。 20 如果在子类中想使用被子类隐藏了的父类成员变量或方法就可以使用关键字。 21 Java中为了克服的缺点,使用了接口,一个类可以实现多个接口。 22 就是方法定义和常量值的集合。 23 使用关键字来定义接口。 24 接口定义包括接口的声明和。 25 一个类通过使用关键字声明自己实现一个或多个接口。 26 如果一个类实现了某个接口,那么这个类必须实现该接口的。 27 接口中的方法被默认的访问权限是。 28 接口的定义包括和接口体。 29 定义接口时,接口体中只进行方法的声明,不允许提供方法的。 30 如果接口中的方法的返回类型不是void的,那么在类中实现该接口的方法时,方法体至少要有一个语句。 31 指那些类定义代码被置于其他类定义中的类。 32 是Java SE5.0的新特性。

相关文档