当前位置:文档之家› C习题解答

C习题解答

类名::构造函数名(参数总表):对象成员1(参数名表1),对象成员2(参数名表2),……对象成员n(参数名表n){……}
冒号后用逗号隔开的是要初始化的对象成员,附在后面的参数名表1,…,参数名表n依次为调用相应对象成员所属的构造函数时的实参表。这些表中的参数通常来自冒号前的参数总表,但没有类型名。
4.2.9 所有类对象未重载的赋值运算符“=”是怎样工作的?为什么它可以进行连续赋值?
二.编程与综合练习题
4.3 构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试。(包括用成员函数和用普通函数)
解:本题要求仅是定义类的练习,并非实用的提供日期时间的程序。实用的日期时间程序见附录二的日期时间函数。
4.2.4 什么叫类域?为什么说类域是抽象的?
答:类域是类体所包括的范围。每个类定义都引入了一个独立的类域,在类域中说明的标识符仅在该类的类域中有效。由于类只是一个说明,看上去有数据,有函数,有类型定义,但是它并非实体,不分配内存,当然也不能运行。所以说类域是抽象的。
4.2.5 引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为引用?为什么返回值为引用的函数可以作为左值?
4.2.6 什么是缺省的构造函数?缺省的构造函数最多可以有多少个?
答:如果在类定义中不显式地定义构造函数,C++编译器会自动产生一个缺省的构造函数,不过该函数不做具体的初始化工作。只要构造函数是无参的或者只要各参数均有缺省值的,C++编译器都认为是缺省的构造函数。缺省的构造函数只能有一个。
4.2.7 拷贝构造函数用于哪三个方面?
(2)公有的public
(3)私有的private
(4)公有的public
(5)数据
(6)函数
4.1.2 类的访问限定符包括(1)、(2)和(3)。私有数据通常由(4)函数来访问(读和写)。这些函数统称为(5)。
答案:
(1)public(公有的)
(2)private(私有的)
(3)protected(保护的)
答:对所有的类对象,未重载的赋值运算符“=”称作缺省的按成员拷贝赋值操作符,同类对象之间可以用“=”直接拷贝。因为缺省的赋值操作返回一个对象的引用,所以它可以进行连续赋值。
为什么在友元函数的函数体内访问对象成员时,必须用对象名加运算符“.”再加对象成员名?
答:友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员名。这一点和一般函数一样。
对象的第一特征是封装,那么由对象组成的面向对象的程序怎样建立各对象之间的有效联系?面向对象程序的组织与面向过程有什么不同?
答:因为对象的操作主要用来响应外来消息并为其他对象提供服务,所以面向对象的程序利用消息传递机制来建立各对象之间的有效联系,协调各对象的运行。一个对象可以向其他对象发送消息以请求服务,也可以响应其他对象传来的消息,完成自身固有的某些操作,从而服务于其他对象。
Windows系统使用事件驱动的编程模式。所谓事件的含义非常广泛。输入设备的动作,如敲打键盘、按鼠标等会产生一系列的事件(注意不是一个事件)。操作系统所作的一举一动也被当作某种类型的事件,应用程序也会产生各种事件。事件用来标识发生的某件事情。
Windows系统对于应用程序环境中发生的每一个事件都会以对应的某种消息的形式标识,并放入相应的Windows建立的消息队列中,然后由对应的应用程序或窗口函数去处理。窗口函数处理是分层的,前面处理不了的送到后面,最后处理不了剩下的全由缺省的窗口函数处理。
答:
(1)用类的一个对象去初始化该类的另一个对象时使用。
(2)当函数的形参是类的对象,调用函数时,进行形参与实参结合时使用。
(3)当函数的返回值是类对象,函数执行结束返回调用者时使用。
4.2.8 写出含有对象成员的类的构造函数的格式,并做简单说明。
答:C++中对含对象成员的类对象的构造函数有固定的格式:
C++中结构、联合与类三者间有何异同?
答:在C++中结构(structure)与类几乎是完全一样的类型,差别仅仅在于缺省情况下结构的成员为公有的。联合(union)是C++的导出数据类型,在语法与功能上类似于结构,二者的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的存储开始地址都相同,所以在任一时刻联合变量只能存储一个成员。
类的成员函数在什么情况下应该定义为私有的?这样做的目的是什么?
答:除接口函数和创建本类对象的构造函数和撤消该对象的析构函数外。其余成员函数应该定义为私有的,这是开发类时故意对外隐蔽起来的操作,而这些往往是最复杂最关键的部分。类中故意的隐藏也为以后的升级扩展留下了余地,只要接口不变,内部再变,也不必修改原来的程序,就象MFC(微软基础类)升级后,由MFC底层类所编的程序完全不必修改,自动升级。
classTimedate{
private:
YR year;
MT month;
intdate;
inthh;
intmm;
intss;
public:
Timedate(){year=Y2000;month=Jan;date=1;hh=0;mm=0;ss=0;}
Timedate(YR a,MT b,intc){
封装性增加了对象的独立性,C++通过建立数据类型——类,来支持封装和数据隐藏。一个定义完好的类一旦建立,就可看成完全的封装体,作为一个整体单元使用,用户不需要知道这个类是如何工作的,而只需要知道如何使用就行。另一方面,封装增加了数据的可靠性,保护类中的数据不被类以外的程序随意使用。这两个优点十分有利于程序的调试和维护。
year=a;
month=b;
date=c;
hh=12;mm=30;ss=0;
}
voidgetdate(YR &,MT &,int&);//使用引用一次取得3个数值
voidgettime(int&,int&,int&);
voidputdate(YR ,MT ,int);
第四章 类与对象习题
一.基本概念与基础知识自测题
4.1 填空题
5.1.1 引入类定义的关键字是(1)。类的成员函数通常指定为(2),类的数据成员通常指定为(3)。指定为(4)的类成员可以在类对象所在域中的任何位置访问它们。通常用类的(5)成员表示类的属性,用类的(6)成员表示类的操作。
答案:
(1)class
(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)运算符。
friendComplexoperator+(constComplex &c1,constComplex &c2);
类的静态数据成员与函数中的静态成员有何异同?
答:类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中,为该类所有对象公用。函数中的静态变量也位于公用内存中,不随函数调用而重新分配,所以总是保留上次进入并执行该函数后留下的信息。
面向过程的程序是模块化的,模块的组织具有分层结构特点,层与层之间是调用关系。面向对象程序是由一个个封装的对象组成,而对象是由紧密结合在一起的算法和数据结构组成。对象之间是相互请求和相互协作的关系。
简叙Windows下应用程序的运行方式。
答:Windows系统支持多个应用程序同时执行,在界面形式上,它支持多个窗口同时活动。它的运行机制是“消息传递和事件驱动(messagebased andevent driven)”。
#include<iostream>
#include<iomanip>
usingnamespacestd;
enumYR{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005};//
enumMT{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};
答案:
(1)参数
(2)返回值
(3)数组元素
(4)数组名本身
4.1.6构造函数的任务是(1)。构造函数无(2)。类中可以有(3)个构造函数,它们由(4)区分。如果类说明中没有给出构造函数,则C++编译器会(5)。拷贝构造函数的参数是(6),当程序没有给出复制构造函数时,系统会自动提供(7)支持,这样的复制构造函数中每个类成员(8)。
4.2.2 C++编译器怎样对标识符进行解析?
答:编译器对标识符的解析分两步,第一步查找在声明中用到的标识符,特别是函数成员声明中用到的参数类型,第二步是函数成员体内的标识符。
4.2.3 为什么说类与对象的概念是客观世界的反映?
答:客观世界的事物都具有某些属性和行为(或操作),具有相同属性和行为的事物可以归属于一类,用分类的方法可以提高认识事物的效率。C++中定义的类则是通过抽象的方法将某一类事物共有的静态特征(属性)和动态特征(行为)概括出来并加以描述,而对象是类的具体实现,所以说类与对象的概念是客观世界的反映。
相关主题