C++第四章习题解答

C++第四章习题解答
第四章类与对象习题
一. 基本概念与基础知识自测题
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)
白细胞介素12
(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.2 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 所有类对象未重载的赋值运算符“=”是怎样工作的?为什么它可以进行连续赋值?
答:对所有的类对象,未重载的赋值运算符“ =”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的引用,所以它可以进行连续赋值。
绝路狂飙为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“.”再加对象成员名?
答:友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员名。这一点和一般函数一样。
女法官陈玉莹重载复数运算符+时,采用下面友元函数声明:
friend Complex operator+(Complex &c1,Complex &c2);
为什么不能用于“实数+复数”?怎样改进才能适用?为什么?
答:使用引用类型变量作为运算符重载函数的参数,身为左值的实数类型实参不能被转换为复数,编译时无法通过。添加const说明,使实数到复数的转换隐式地在一份拷贝上进行,则可以实现“实数+复数”运算。修改后的说明为:
friend Complex operator+(const Complex &c1, const Complex &c2);
类的静态数据成员与函数中的静态成员有何异同?

本文发布于:2024-09-24 17:19:25,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/435020.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   函数   成员
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议