《第7 类与对象部分习题 - noanswer》由会员分享,可在线阅读,更多相关《第7 类与对象部分习题 - noanswer(9页珍藏版)》请在金锄头文库上搜索。
1、第四章 类与对象习题一. 基本概念与基本知识自测题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) publi
2、c(公有的)(2) private(私有的)(3) protected(保护的)(4) 公有的成员函数(5) 类的接口4.1.3 一般在逻辑上,同一类的每个对象均有 (1) 代码区,用以存储成员函数。而在物理上一般只有 (2) 代码区。只有在 (3) 定义,并 (4) 的函数和加了核心字 (5) 的函数例外。答案:(1) 独立的(2) 共用的(3) 在类阐明中(4) 不涉及循环等复杂构造(5) inline4.1.4 C+中支持三种域: (1) 、 (2) 、 (3) 。函数域被涉及在 (4) 中,全局域被涉及在 (5) 中。using批示符以核心字using开头,背面是核心字 (6) ,最后
3、是 (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) 。类中可
4、以有 (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 运算符重载时,其函数名由
5、 (1) 构成。成员函数重载双目运算符时,左操作数是 (2) ,右操作数是 (3) 。答案:(1) 核心字operator和该运算符(2) 对象(3) 该函数的参数4.1.9 面向过程的程序设计中程序模型描述为 (1) ,面向对象程序设计的程序模型可描述为 (2) 。答案:(1)“程序=算法+数据构造”。其数据与数据解决是分离的。(2)程序=(对象+对象+对象)+消息;对象=(算法+数据构造)。面向对象设计将数据和对数据的操作措施放在一起,形成一种相对独立的整体对象(Object),并通过简朴的接口与外部联系。对象之间通过消息(Message)进行通讯。4.2 简答题4.2.1 简朴解释什么是
6、面向对象程序设计的封装性。答:对象是一种封装体,在其中封装了该对象所具有的属性和操作。对象作为独立的基本单元,实现了将数据和数据解决相结合的思想。此外,封装特性还体目前可以限制对象中数据和操作的访问权限,从而将属性“隐藏”在对象内部,对外只呈现一定的外部特性和功能。封装性增长了对象的独立性,C+通过建立数据类型类,来支持封装和数据隐藏。一种定义完好的类一旦建立,就可当作完全的封装体,作为一种整体单元使用,顾客不需要懂得这个类是如何工作的,而只需要懂得如何使用就行。另一方面,封装增长了数据的可靠性,保护类中的数据不被类以外的程序随意使用。这两个长处十分有助于程序的调试和维护。4.2.3 为什么说
7、类与对象的概念是客观世界的反映?答:客观世界的事物都具有某些属性和行为(或操作),具有相似属性和行为的事物可以归属于一类,用分类的措施可以提高结识事物的效率。C+中定义的类则是通过抽象的措施将某一类事物共有的静态特性(属性)和动态特性(行为)概括出来并加以描述,而对象是类的具体实现,因此说类与对象的概念是客观世界的反映。4.2.4 什么叫类域?为什么说类域是抽象的?答:类域是类体所涉及的范畴。每个类定义都引入了一种独立的类域,在类域中阐明的标记符仅在该类的类域中有效。由于类只是一种阐明,看上去有数据,有函数,有类型定义,但是它并非实体,不分派内存,固然也不能运营。因此说类域是抽象的。4.2.5
8、 引用作为函数参数时为什么能实现两个实参之间的数据互换?为什么相应实参不能为引用?为什么返回值为引用的函数可以作为左值?答:引用变量是其关联变量的别名,两者在内存中占据同一种存储单元。在一种以引用作为参数的函数中,互换两个参数的值,事实上就是互换两个实参的值。如果函数的参数是引用,调用时需要获得实参的地址,而实参如果已经是一种地址,再进行引用将产生错误,故相应实参不能为引用。函数返回引用实际是指明(返回)了相应的关联变量,因此声明返回值为引用的函数事实上是将关联变量作为左值参与运算。4.2.6 什么是缺省的构造函数?缺省的构造函数最多可以有多少个?答:如果在类定义中不显式地定义构造函数,C+编
9、译器会自动产生一种缺省的构造函数,但是该函数不做具体的初始化工作。只要构造函数是无参的或者只要各参数均有缺省值的,C+编译器都觉得是缺省的构造函数。缺省的构造函数只能有一种。4.2.7 拷贝构造函数用于哪三个方面?答:(1) 用类的一种对象去初始化该类的另一种对象时使用。(2) 当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。(3) 当函数的返回值是类对象,函数执行结束返回调用者时使用。4.2.8 写出具有对象成员的类的构造函数的格式,并做简朴阐明。答:C+中对含对象成员的类对象的构造函数有固定的格式:类名:构造函数名(参数总表):对象成员1(参数名表1),对象成员2(参数名表2
10、),对象成员n(参数名表n)冒号后用逗号隔开的是要初始化的对象成员,附在背面的参数名表1,参数名表n依次为调用相应对象成员所属的构造函数时的实参表。这些表中的参数一般来自冒号前的参数总表,但没有类型名。4.2.9 所有类对象未重载的赋值运算符“”是如何工作的?为什么它可以进行持续赋值?答:对所有的类对象,未重载的赋值运算符“ =”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。由于缺省的赋值操作返回一种对象的引用,因此它可以进行持续赋值。4.2.10 为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“”再加对象成员名?答:友元函数不是类的成员函数,在函数体中访问
11、对象的成员,必须用对象名加运算符“.”加对象成员名。这一点和一般函数同样。4.2.12 类的静态数据成员与函数中的静态成员有何异同?答:类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中,为该类所有对象公用。函数中的静态变量也位于公用内存中,不随函数调用而重新分派,因此总是保存上次进入并执行该函数后留下的信息。4.2.13 C+中构造、联合与类三者间有何异同?答:在C+中构造(structure)与类几乎是完全同样的类型,差别仅仅在于缺省状况下构造的成员为公有的。联合(union)是C+的导出数据类型,在语法与功能上类似于构造,两者的区别是:构造变量的各成员同步被分派
12、了各自独立的内存区,而联合变量的各个成员的存储开始地址都相似,因此在任一时刻联合变量只能存储一种成员。4.2.14 对象的第一特性是封装,那么由对象构成的面向对象的程序如何建立各对象之间的有效联系?面向对象程序的组织与面向过程有什么不同?答:由于对象的操作重要用来响应外来消息并为其她对象提供服务,因此面向对象的程序运用消息传递机制来建立各对象之间的有效联系,协调各对象的运营。一种对象可以向其她对象发送消息以祈求服务,也可以响应其她对象传来的消息,完毕自身固有的某些操作,从而服务于其她对象。面向过程的程序是模块化的,模块的组织具有分层构造特点,层与层之间是调用关系。面向对象程序是由一种个封装的对
13、象构成,而对象是由紧密结合在一起的算法和数据构造构成。对象之间是互相祈求和互相协作的关系。4.2.16 类的成员函数在什么状况下应当定义为私有的?这样做的目的是什么?答:除接口函数和创立本类对象的构造函数和撤销该对象的析构函数外。其他成员函数应当定义为私有的,这是开发类时故意对外隐蔽起来的操作,而这些往往是最复杂最核心的部分。类中故意的隐藏也为后来的升级扩展留下了余地,只要接口不变,内部再变,也不必修改本来的程序,就象MFC(微软基本类)升级后,由MFC底层类所编的程序完全不必修改,自动升级。二编程与综合练习题4.3 构造一种日期时间类(Timedate),数据成员涉及年、月、日和时、分、秒,
14、函数成员涉及设立日期时间和输出时间,其中年、月请用枚举类型,并完毕测试。(涉及用成员函数和用一般函数)4.4 设计并测试一种矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平放置。操作为计算矩形周长与面积。测试涉及用成员函数和一般函数。4.5 定义一种圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周长、面积,输出半径、周长和面积。规定定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。4.6 设计一种学校在册人员类(Person)。数据成员涉及:身份证号(IdPerson),姓名(Name),性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数涉及人员信息的录入和显示。还涉及构造函数与拷贝构造函数。设计一种合适的初始值。4.7 对上面4道题中的类对象的数据,由友元函数来进行访问。并对比友元函数、成员函数和一般函数使用上的不同。4.8 为复数类(Complex)增长重载的运算符-、-=、*=和/=。设+为实部和虚部各自增一,亦请重载前置与后置+运算符。分别使用成员函数和友元函数各做一遍。并测试。4.10 内置数据类型可以进行类型强制转换,类也可以进行同样的转换,这是通过定义类型转换函数实现的。它只能是类的成员函数,不能是友元函数。格式为: 类名:operat