第7 类与对象部分习题 - noanswer

第7 类与对象部分习题 - noanswer
第7 类与对象部分习题 - noanswer

第7 类与对象部分习题- noanswer

第四章类与对象习题

一.基本概念与基础知识自测题

4.1 填空题

5.1.1 引入类定义的关键字是(1)。类

的成员函数通常指定为(2),类的数据成员通常指定为(3)。指定为(4)的类成员可以在类对象所在域中的任何位置访问它们。通常用类的(5)成员表示类的属性,用类的(6)成员表示类的操作。

答案:

(1)class

(2)公有的public

(3)私有的private

(4)公有的public

(5)数据

(6)函数

4.1.2 类的访问限定符包括(1)、

(2)和(3)。私有数据通常由(4)函数来访问(读和写)。这些函数统称为(5)。

答案:

(1)public(公有的)

(2)private(私有的)

(3)protected(保护的)

(4)公有的成员函数

(5)类的接口

4.1.3 通常在逻辑上,同一类的每个对象都有

(1)代码区,用以存储成员函数。而在

物理上通常只有(2)代码区。只有

在(3)定义,并(4)的函

数和加了关键字(5)的函数例外。答案:

(1)独立的

(2)共用的

(3)在类说明中

(4)不包括循环等复杂结构

(5)inline

4.1.4 C++中支持三种域:(1)、

(2)、(3)。函数域被包括在

(4)中,全局域被包括在(5)中。

using指示符以关键字using开头,后面是

关键字(6),最后是(7)。这

样表示以后在该名字空间中所有成员都

(8)。如不使用using指示符则在使用

时要加::,称为(9)运算符。

答案:

(1)局部域(local scope)

(2)名字空间域(namespace scope)

(3)类域(class scope)

(4)局部域

(5)名字空间域

(6)namespace

(7)名字空间名

(8)可以直接被使用

(9)域

4.1.5 引用通常用作函数的(1)和(2)。对数组只能引用(3)不能引用(4)。

答案:

(1)参数

(2)返回值

(3)数组元素

(4)数组名本身

4.1.6 构造函数的任务是(1)。构造函

数无(2)。类中可以有(3)个

构造函数,它们由(4)区分。如果

类说明中没有给出构造函数,则C++编译器

会(5)。拷贝构造函数的参数是

(6),当程序没有给出复制构造函数时,系统会自动提供(7)支持,这样的

复制构造函数中每个类成员(8)。答案:

(1)初始化数据成员

(2)函数返回类型说明

(3)多

(4)不同的参数表

(5)自动给出一个默认的构造函数

(6)同一类对象的引用

(7)默认的的复制构造函,称为默认的按成员语义支持。

(8)被依次复制

4.1.7 一个类有(1)个析构函数。(2)时,系统会自动调用析构函数。

答案:

(1)一

(2)对象注销时

4.1.8 运算符重载时,其函数名由(1)构

成。成员函数重载双目运算符时,左操作数

是(2),右操作数是(3)。答案:

(1)关键字operator和该运算符

(2)对象

(3)该函数的参数

4.1.9 面向过程的程序设计中程序模型描述为

(1),面向对象程序设计的程序模型可描

述为(2)。

答案:

(1)“程序=算法+数据结构”。其数据与数据处理是分离的。

(2)程序=(对象+对象+……+对象)+消息;

对象=(算法+数据结构)。面向对象设计将

数据和对数据的操作方法放在一起,形成一

个相对独立的整体——对象(Object),并

通过简单的接口与外部联系。对象之间通过

消息(Message)进行通讯。

4.2 简答题

4.2.1 简单解释什么是面向对象程序设计的封装性。

答:对象是一个封装体,在其中封装了该对象所

具有的属性和操作。对象作为独立的基本单元,实现了将数据和数据处理相结合的思想。此外,封装特性还体现在可以限制对象中数据和操作的访问权限,从而将属性“隐藏”在对象内部,对外只呈现一定的外部特性和功能。

封装性增加了对象的独立性,C++通过建立数据类型——类,来支持封装和数据隐藏。一个定义完好的类一旦建立,就可看成完全的封装体,作为一个整体单元使用,用户不需要知道这个类是如何工作的,而只需要知道如何使用就行。另一方面,封装增加了数据的可靠性,保护类中的数据不被类以外的程序随意使用。这两个优点十分有利于程序的调试和维护。

4.2.3 为什么说类与对象的概念是客观世界的反映?

答:客观世界的事物都具有某些属性和行为(或操作),具有相同属性和行为的事物可以归属于一类,用分类的方法可以提高认识事物的效率。C++中定义的类则是通过抽象的方法将某一类事物共有的静态特征(属性)和动态特征(行为)概括出来并加以描述,而对象是类的具体实现,

所以说类与对象的概念是客观世界的反映。

4.2.4 什么叫类域?为什么说类域是抽象的?答:类域是类体所包括的范围。每个类定义都引入了一个独立的类域,在类域中说明的标识符仅在该类的类域中有效。由于类只是一个说明,看上去有数据,有函数,有类型定义,但是它并非实体,不分配内存,当然也不能运行。所以说类域是抽象的。

4.2.5 引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为引用?为什么返回值为引用的函数可以作为左值?

答:引用变量是其关联变量的别名,二者在内存中占据同一个存储单元。在一个以引用作为参数的函数中,交换两个参数的值,实际上就是交换两个实参的值。如果函数的参数是引用,调用时需要取得实参的地址,而实参如果已经是一个地址,再进行引用将产生错误,故对应实参不能为引用。

函数返回引用实际是指明(返回)了相应的关

联变量,所以声明返回值为引用的函数实际上是将关联变量作为左值参与运算。

4.2.6 什么是缺省的构造函数?缺省的构造函数最多可以有多少个?

答:如果在类定义中不显式地定义构造函数,C++编译器会自动产生一个缺省的构造函数,不过该函数不做具体的初始化工作。只要构造函数是无参的或者只要各参数均有缺省值的,C++编译器都认为是缺省的构造函数。缺省的构造函数只能有一个。

4.2.7 拷贝构造函数用于哪三个方面?

答:

(1)用类的一个对象去初始化该类的另一个对象时使用。

(2)当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。

(3)当函数的返回值是类对象,函数执行结束返回调用者时使用。

4.2.8 写出含有对象成员的类的构造函数的格

式,并做简单说明。

答:C++中对含对象成员的类对象的构造函数有固定的格式:

类名::构造函数名(参数总表):对象成员1(参数名表1),对象成员2(参数名表2),……对象成员n(参数名表n){……}

冒号后用逗号隔开的是要初始化的对象成员,附在后面的参数名表1,…,参数名表n依次为调用相应对象成员所属的构造函数时的实参表。这些表中的参数通常来自冒号前的参数总表,但没有类型名。

4.2.9 所有类对象未重载的赋值运算符“=”是怎样工作的?为什么它可以进行连续赋值?

答:对所有的类对象,未重载的赋值运算符“ =”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的引用,所以它可以进行连续赋值。

4.2.10 为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“.”再加对象

成员名?

答:友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员名。这一点和一般函数一样。

4.2.12 类的静态数据成员与函数中的静态成员有何异同?

答:类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中,为该类所有对象公用。函数中的静态变量也位于公用内存中,不随函数调用而重新分配,所以总是保留上次进入并执行该函数后留下的信息。

4.2.13 C++中结构、联合与类三者间有何异同?

答:在C++中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下结构的成员为公有的。联合(union)是C++的导出数据类型,在语法与功能上类似于结构,二者的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的存储开始地址都相同,所以在任一时刻联合变量只能存储一个

成员。

4.2.14 对象的第一特征是封装,那么由对象组成的面向对象的程序怎样建立各对象之间的有效联系?面向对象程序的组织与面向过程有什么不同?

答:因为对象的操作主要用来响应外来消息并为其他对象提供服务,所以面向对象的程序利用消息传递机制来建立各对象之间的有效联系,协调各对象的运行。一个对象可以向其他对象发送消息以请求服务,也可以响应其他对象传来的消息,完成自身固有的某些操作,从而服务于其他对象。

面向过程的程序是模块化的,模块的组织具有分层结构特点,层与层之间是调用关系。面向对象程序是由一个个封装的对象组成,而对象是由紧密结合在一起的算法和数据结构组成。对象之间是相互请求和相互协作的关系。

4.2.16 类的成员函数在什么情况下应该定义为私有的?这样做的目的是什么?

答:除接口函数和创建本类对象的构造函数和撤

消该对象的析构函数外。其余成员函数应该定义为私有的,这是开发类时故意对外隐蔽起来的操作,而这些往往是最复杂最关键的部分。类中故意的隐藏也为以后的升级扩展留下了余地,只要接口不变,内部再变,也不必修改原来的程序,就象MFC(微软基础类)升级后,由MFC底层类所编的程序完全不必修改,自动升级。

二.编程与综合练习题

4.3 构造一个日期时间类(Timedate),数据成

员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试。(包括用成员函数和用普通函数)

4.4 设计并测试一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平放置。操作为计算矩形周长与面积。测试包括用成员函数和普通函数。

4.5 定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并

计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。

4.6 设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name),性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。

4.7 对上面4道题中的类对象的数据,由友元函数来进行访问。并对比友元函数、成员函数和普通函数使用上的不同。

4.8 为复数类(Complex)增加重载的运算符-、

-=、*=和/=。设++为实部和虚部各自增一,

亦请重载前置与后置++运算符。分别使用成

员函数和友元函数各做一遍。并测试。

4.10 内置数据类型可以进行类型强制转换,类

也可以进行同样的转换,这是通过定义类型

转换函数实现的。它只能是类的成员函数,

不能是友元函数。格式为:

类名::operator 转换后的数据类型( ) {…}

如:operator float()是转换为浮点数的成员

函数。使用时的格式为:

float(对象名); 或(float) 对象名;

定义人民币类,数据成员包括:圆、角、分,均为整型。类型转换函数将人民币类强制转

换为浮点数,以圆为单位。并编程进行检验。解:本题的解答未考虑角、分最多为9。类型强制转换的两种格式编程时毋需考虑,自动实

现。

#include

using namespace std;

class IntRMB{ //人民币类private:

int IYuan;

int Jiao;

int Fen;

public:

IntRMB(int y=0,int j=0,int f=0); //构造函数

void print(); //数据输出函数

operator float(); //浮点数类型转换函数

};

IntRMB::IntRMB(int y,int j,int f){//构造函数IYuan=y;

Jiao=j;

Fen=f;

}

IntRMB::operator float(){

float temp;

temp=float(IYuan + (Jiao/10.0) + (Fen/100.0));

return temp;

}

void IntRMB::print(){

cout <

}

int main(){

float a;

IntRMB Im(10,25,3);

cout << "***转换前***" <

Im.print();

a=float(Im); //使用重载的类型关键字进行强制类型转换

cout << "***转换后***" <

cout<

a=(float)Im; //使用重载的类型关键字进行强制类型转换

cout << "***转换后***" <

cout<

getchar(); //按任意键结束运行return 0;

}

java 第七章面向对象编程

第七章面向对象编程 【教学目的】: 1、类的概念 2、类的定义 3、对象的定义 教学内容: 学生类的定义,与对象是使用。 一、类的概念 Object Oriented翻译而来的,简称为OO。 Java语言与其他面向对象语言一样,引入了类和对象的概念,类是用来创建对象的模板,它包含被创建对象的属性和方法的定义。对象就是类的一个实例 人(类) {姓名 性别 年龄 地址 吃饭() 睡觉() 上班() 学习() } 二、类的定义 修饰符class 类名 { 成员变量 成员方法 } 类的修饰符: public:公共的: final:最终的,不能被继承 abstract:抽象的,不能被实例化。 1、成员变量 变量分局部变量和成员变量 区别: 成员变量如果是基本类型系统会自动初始化,这个初始化的值,我们称默认值。 bytes、long、int默认值:0;long的默认值0L floate默认值:0F double默认值:0D, char默认值:’\U0000’; Boolean默认值:flase 其它:unll 但是局部变量,程序必须初始化,系统不会为局部变量进行初始化工作。 class temp

{ public static void main(String[] args) { int a; //局部变量\\(int a;-声明,a=8;-初始化)System.out.println(a); } } 这个时候程序就会成问题,因为局部变量没有初始化。 下面我们定义学生类 Public class student {private String name; //定义学生姓名 private String ID; //定义学生学号 private String sex=""; //定义学生性别 private String speci=""; //定义学生专业 } 2、成员方法 类中的方法是用来执行执行某种行为的。 以下我们定义print成员方法。 public void print() { String information="学生学号:"+ID+"\n学生姓名:"+name+"\n"; if(!sex.equals("")) information+="性别="+sex+"\n"; if(!speci.equals("")) information+="专业="+speci+"\n"; information+="\n"; information+="---------------------"; System.out.println(information); } 3、构造方法 还有有一个非常特殊的方法,叫做构造方法,构造方法就是跟类同名的一个特殊的方法,构造方法的特殊之处: (1)构造方法与类名相同。 (2)一个类可以多个构造方法。 (3)一个构造方法可以有0、1个或者多个参数。 (4)构造方法没有返回值,但是可以不用写void。

第7章 类与对象思考与练习题答案

第7章类与对象 1、什么叫面向对象的程序设计语言?什么叫类?什么叫对象?什么叫消息? 答:在程序设计语言中,面向对象是指采用抽象、封装、继承、多态等程序设计的方法。因此,具有抽象、封装、继承、多态等特性的编程语言称为面向对象的程序设计语言。 类实际上是一种抽象的数据类型,它将完成某特定功能所用到的数据和对数据的操作(即函数)封装在一起。对象是指具有某些属性和功能的单个个体。消息是对象之间相互请求或相互协作的途径,是要求某个对象执行其中某个功能操作的规格说明。 2、结构化程序设计方法存在什么问题? 答:结构化程序设计方法主要存在以下问题: 1)软件重用性差:重用性是指同一软件不经修改或稍加修改就可多次重复使用的性质。软件重用性是软件工程追求的目标之一。 2)软件可维护性差:软件工程强调软件的可维护性,强调文档资料的重要性,规定最终的软件产品应该由完整、一致的配置成分组成。在软件开发过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要的质量指标。实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。 3)开发出的软件不能满足用户需要:用传统的结构化方法开发大型软件系统涉及各种不同领域的知识,在开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。 3、什么叫抽象?什么叫分类? 答:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征,就叫作抽象。抽象是形成概念的必须手段。 分类就是把具有相同属性和服务的对象划分为一类,用类作为这些对象的抽象描述。 4、请简述结构体、联合体和类三种类类型的异同点。 答:三种类类型的异同点见下列表格:

java答案第七章

Java语言程序设计 第七章课后习题答案 1.数组的声明与数组元素的创建有什么关系? 答:声明数组仅仅是代表试图创建数组,不分配任何存储空间,声明是为创建做“铺垫”。 2.Vector类的对象与数组有什么关系?什么时候适合使用数组,什么时候适合使用Vector?答:vector是一个能够存放任意对象类型的动态数组,容量能自动扩充,而数组存储固定且类型相同的对象;对于存储固定类型相同的对象使用数组,对于存储不同类型或者动态调整数组大小的情况使用Vector。 3.与顺序查找相比,二分查找有什么优势?使用二分查找的条件? 答:对于大数据量中进行查找时二分查找比顺序查找效率高得多;条件是已排序的数组。 4.试举出三种常见的排序算法,并简单说明其排序思路。 答:①选择排序:基本思想是站在未排序列中选一个最小元素,作为已排序子序列,然后再重复地从未排序子序列中选取一个最小元素,把它加到已经排序的序列中,作为已排序子序列的最后一个元素,直到把未排序列中的元素处理完为止。 ②插入排序:是将待排序的数据按一定的规则逐一插入到已排序序列中的合适位置处,直到将全部数据都插入为止。 ③二分查找:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 5.声明一个类People,成员变量有姓名、出生日期、性别、身高、体重等;生成10个People 类对象,并放在一个以为数组中,编写方法按身高进行排序。 //People类 public class People{ private String name; private String birthdaydate; private String sex; private double height; private double weight; public People(){//默认构造函数 } public People(People p){ https://www.360docs.net/doc/88116811.html,=https://www.360docs.net/doc/88116811.html,; this.birthdaydate=p.birthdaydate;

软件工程(第五版)--习题及答案--第七章

一、选择题 1、汽车有一个发动机,汽车和发动机之间的关系是(B)关系。 A、一般具体 B、整体部分 C、分类关系 D、is a 2、火车是一种陆上交通工具,火车和陆上交通工具之间的关系是(D)关系。 A、组装 B、整体部分 C、has a D、一般具体 3、面向对象程序设计语言不同于其他语言的最主要特点是(C)。 A、模块 B、抽象性 C、继承性 D、共享性 4、软件部件的内部实现与外部可访问性分离,这是指软件的(A)。 A、封装性 B、抽象性 C、继承性 D、共享性 5、面向对象分析阶段建立的三个模型中,核心模型是(C)模型。 A、功能 B、动态 C、对象 D、分析 6、对象模型的描述工具是(C)。 A、状态图 B、数据流图 C、对象图 D、结构图 7、动态模型的描述工具是(A)。 A、状态图 B、结构图 C、对象图 D、流程图 8、在只有单重继承的类层次结构中,类层次结构是(A)层次结构。 A、树型 B、网状型 C、星型 D、环型 9、(C)模型表示了对象的互相行为。 A、功能 B、动态 C、对象 D、分析 10、在确定类时,所有(A)是候选的类。 A、名词 B、形容词 C、动词 D、代词 11、面向对象分析的原则不包括(C)。

A、抽象 B、封装 C、依赖 D、继承 12、常用动词和动词词组来表示(C)。 A、对象 B、类 C、关联 D、属性 13、在确定属性时,所有(B)是候选的属性。 A、名词 B、修饰性名词词组 C、动词 D、词组 14、在面向对象方法中,信息隐藏是通过对象的(A)来实现的。 A、封装性 B、分类性 C、继承性 D、共享性 15、面向对象设计的准则不包括(D)。 A、模块化 B、抽象 C、信息隐藏 D、强耦合 二、简答题 1、面向对象分析通常要建立哪三种模型?它们分别描述系统的哪些方面? 答:面向对象分析通常要建立三种模型,分别是对象模型、动态模型和功能模型。其中:对象模型描述系统的数据结构,它是用来描述系统包含的对象及对象之间关系的模型; 动态模型描述系统的控制结构,它是用来确定各个对象之间交互及整体的控制结构的模型; 功能模型描述系统的功能,它是用来描述系统要实现的功能的模型。 2、对象模型有哪五种层次? 答:复杂问题(大型系统)的对象模型由5个层次组成,即主题层、类-&-对象层、结构层、属性层和服务层。 (1)类-&-对象层:定义类和属性。在这个层次将分析与待开发软件对应的各个现实世界的实体,并从中抽象出类和对象。 (2)结构层:定义对象和类之间的层次结构关系,如一般-特殊结构(即继承结构)、整体-部分结构(即组合结构)。 (3)属性层:定义属性。为类和对象层中抽取出来的各个类和对象设计静态属性和它们之间的关系。 (4)服务层:定义对象和类的动态属性以及对象之间的消息通信。

第7章 类和对象 习题解答

第7章类和对象 7.1 简介 面向对象程序设计的思路和人们日常生活中处理问题的思路是相似的。社会生活中,一个复杂的事物总是可以分解为一些独立的组成部分。例如,我们的住房是由卧室、客厅、厨房和卫生间等组成;学校的人员是由教师、学生、行政和后勤人员组成;汽车是由发动机、车架、车身、车轮等组成。大家知道,现代化的汽车的生产过程,并不是先设计和制造发动机,再设计和制造车架,然后设计和制造车身和轮了,这些部件是由不同的生产单位根据产品的要求独立设计制造完成的,然后在总装厂依据各部分之间的联系组装在一起。这就是面向对象的程序设计的基本思路。 面向过程的程序设计是以算法为主体的,算法和数据结构两者是互相独立、分开设计的,可以用这样的公式来表述: 程序=算法+数据结构 在实践中人们逐渐认识到算法和数据结构是互相紧密联系不可分的。与面向过程的程序不同,面向对象的程序是以类和对象为基础的,程序的操作是围绕对象进行的。在此基础上利用了继承机制和多态性,就成为面向对象的程序设计,其实质就是把一个算法和一组数据结构封装在一个对象中,可以用这样的公式来表述: 程序=对象S + 消息 “对象S”表示多个对象。消息的是对对象的控制。 在C++中,每个对象都是由数据和函数两部分组成,面向对象程序设计的基本要求就是将描述某一事物的数据与处理这些数据的函数封装成一个整体。在类的定义中,数据就称为成员数据,函数就称为成员函数。 可以对一个对象进行封装处理,把它的一部份属性和功能对外界屏蔽。例如“傻瓜相机”就是运用封装原理的典型,使用者可以对相机的工作原理和内部结构一无所知,只需知道按下快门就能照片即可。也就是说,把对象的内部实现和外部行为分隔开来,这就是类的“封装性”。它有两方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立、互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下与外界的接口。 继承就是在已有类的基础上增加一些新的属性和行为,形成一个新的类。例如“白猫”继承了“猫”的基本特征,又增加了新的特征从而构建了一个新的类。继承机制使得程序员可以重用已有软件中的一部分甚至大部分,大大编程工作量。 多态性是指由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。例如,在Windows环境下,用鼠标双击一个文件对象,如果对象是一个可执行文件,则会执行此程序,如果对象是一个文本文件,则启动文本编辑器并打开这个文件。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。 其主要特点包括:类和对象的概念、封装性、继承性和多态性。 7.2 知识点 ●对象和类 ●成员数据与成员函数 ●成员属性(私有、公有、保护)、 ●封装性、继承与派生、多态性 ●成员函数的重载 ●this指针

相关主题
相关文档
最新文档