当前位置:首页 > 第五章答案类、构造函数、拷贝构造函数、静态成员、友元
5.3 练习题解答
1.什么是类?为什么说类是一种抽象数据类型的实现?
答:类是C++语言中的一种数据类型。这种数据类型是一种封装体,它既包含有数 据结构,又包含有对这些数据所进行的若干操作。类的获得是通过对于所要解决的问题 中的客观实体的抽象,这种抽象不仅包含了它的属性,同时还有对这些属性的操作,即方 法。对实体的这种抽象可用一个标识符来表示,并可对它引用及操作,这种标识符称为 类。可见,类是抽象数据类型的一种实现。
2.类的定义格式如何?类的说明部分和实现部分各包含些什么?
答:类的定义格式包含说明部分和定义部分。类的说明部分主要有类头和类体两部 分。类头定义格式如下所示。 class<类名>
其中,class是关键字,<类名>同标识符。类体是由一对花括号括起来的若干成员, 成员中包含数据成员和成员函数,右花括号后边有一个分号。 {
〈数据成员说明〉 〈成员函数说明〉 };
成员又分为不同的访问权限,有公有(puLlic)、私有(private)和保护(protected)3种。 类的实现部分是用来定义类中说明的成员函数(没有定义)在该部分定义。如果类中 所有成员函数都已在类体内定义了,则实现部分可以省略。 3.类的成员一般分为哪两部分?这两部分有何区别?
答:类的成员一般分为数据成员和成员函数两个部分。前一部分是用来表示状态的 数据,后一部分是用来改变状态的方法(即函数)。简单地讲,前部分是变量,后部分是函 数,后部分的函数是用来对前部分的变量进行操作的。
4.从访问权限角度如何区分不同种类的成员?它们各自的特点是什么?
答:从访问权限角度可以将类中成员分为三种:公有的,私有的和保护的。 公有成员可以被类体内外的程序所访问,它通常作为一个类体的对外接口。 私有成员只能对类体内的程序所访问,在类体外是不可见的。它是类中的被隐藏 部分。
保护成员对一般类而言视同私有成员,对派生类同公有成员。它可以被其派生类中 的程序访问。
5.作用域运算符的功能是什么?它的使用格式如何? 答:作用域运算符::是C十十语言中的一种运算符,用来指明某个标识符的作用域,主要用于标识类中成员。使用格式如下所示。 <类名>::<成员名>
6.对类中数据成员的类型有何要求?“类的定义允许嵌套”这句话的具体含义是什么? 答:类中数据成员可以是C++语言所允许的任意类型,包括整型、浮点型、字符型、数 组、指针、引用等,也可以是另一个类的对象。
“类的定义允许嵌套”这句话的意思是指在一个类体内可以定义另一个类,这种类称 为嵌套类。
7.什么是对象?如何定义一个对象?对象的成员如何表示?
答:对象是类的实例。一个对象是具有某种类的类型的变量。对象是待解决问题中 实体的抽象。定义对象之前必须先定义这个对象的类,没有类的对象是不存在的。对象 定义格式如下所示。
<类名><对象名表>; 或者
<类名><对象名>=<初始值>; <对象名表>中多个对象用逗号分隔。 一个对象的成员表示如下所示。 <对象名>.<数据成员名>; 或者
<对象名>.<成员函数名>(<实参表>); 指向对象指针的成员如下所示。 <指针名>一><数据成员名>; 或者
<指针名>一><成员函数名>(<实参表>); 8.如何对对象进行初始化?
答:在定义一个对象时,系统通过调用构造函数对该对象进行初始化。例如, class A {
... ... private: int a; };
定义类A的3个对象a1,a2,a3: A a1,a2(5),a3(8);
创建对象al时调用的构造函数,或者设置有默认参数值的构造函数,使成员a值为0 或其他默认值。创建a2和a3时,调用一个参数的构造函数使其成员a值为5和8。 9.什么是构造函数?构造函数有哪些特点?
答:构造函数是一种特殊的成员函数,它的功能是对创建的对象进行初始化。 构造函数具有下述特点: ①该函数名字同类名;
②该函数定义时不必指定返回类型;
③该函数可以重载、可以设置默认参数;即可以无参数,又可以一个或多个参数; ④该函数是由系统在创建对象时自动调用的。 10.什么是析构函数?析构函数有哪些特点?
答:析构函数是构造函数的逆函数,它的功能是用来释放一个对象,它也是一种特殊 的构造函数。它具有如下特点:
①函数名同类名,并前边加修饰符~; ②定义该函数时不加返回类型; ③该函数无参数;
④该函数通常是系统在释放所创建对象时自动调用的。 11.什么是默认构造函数?什么是默认析构函数?
答:默认构造函数是指没有参数的那类构造函数。默认构造函数有两种:一种是用户自己定义的无参数的构造函数;另一种是用户在没有定义任何构造函数时,系统自动生成一个默认构造函数,该函数的数据成员为默认值。
在类的定义中,如果用户没有定义析构函数时,系统将自动生成一个默认的析构函数。
12.什么是拷贝初始化构造函数?它的功能和特点是什么?
答:拷贝初始化构造函数也是在创建对象时被系统调用的一种构造函数。它也是成 员函数。该构造函数是在用已知对象创建另一个对象时系统自动调用的。
拷贝初始化构造函数的名字同类名,定义时不必指出返回类型,它有一个参数,该参 数是该类的对象引用。它可与其他构造函数进行重载。
13.成员函数有什么特征?什么是内联函数?什么是外联函数?
答:成员函数是一种被说明在类体内的函数,它可以访问类体内的任何成员,包含私 有成员。成员函数可以定义在类体内,称为内联函数,也可以定义在类体外,称为外联函 数。如果定义在类体外,在前边加修饰符inline时,也是内联函数。内联函数的函数体在 编译时被替代,而不是在运行时被调用,这时可以减少函数调用时的额外开销。 成员函数具有重载性,隐藏性,可设置默认参数等特点。 l 4.什么是静态成员?静态成员的作用是什么?
答:静态成员是属于类体中的一种成员,它可分为静态数据成员和静态成员函数。 说明静态成员时,在前边加关键字static。
静态数据成员的作用相当于类中的“全局变量”,它不属于某个对象,而是属于全体对 象的。对静态数据成员初始化不用构造函数,而是在类体内使用给一般变量初始化的方 法。任何一个对象都可以改变静态数据成员,并保持被改变的值,直到下次被改变时 为止。
静态成员函数一般是用来直接操作静态数据成员的。
l 5.静态成员函数与非静态成员函数有何不同?静态成员函数的调用格式如何? 答:静态成员函数是要在说明时前边加关键字static的,非静态成员函数是除了静 态成员函数之外的成员函数。静态成员函数中可以直接引用静态数据成员,但不能直接 引用非静态成员,需要引用时要通过对象来引用。 静态成员函数的调用格式如下所示。 <类名>::<静态成员函数名>(<实参表>);
16.什么是友元?为什么要使用友元?什么是友元函数?什么是友元类?
答:友元包含友元函数和友元类。它们被说明在类体中,但又不是该类体的成员。 使用友元的目的在于较方便地访问类体内的私有成员。友元被说明时,前边要加修饰符 friend。
友元函数是说明在类体内,可以访问该类的私有成员的一种函数,它被定义类体外, 同定义一般函数一样。
友元类是被前加friend修饰符说明在类体内的一种类,该类的所有的成员函数都是 被说明为该类的友元函数。 l 7.什么是类的作用域?
答:类的作用域就是指类的作用范围。一般地讲,类的作用域应该是该类的类体内, 称为类域,它比文件域小些,比函数域大些。由于类中成员有不同的访问权限,一般地讲, 类域比较复杂些,应该是具体情况具体分析。 18.什么是局部类?什么是嵌套类?
答:局部类是指定义在函数体内的类,即该类的所有成员都被定义在函数体内,局部 类的类名将被隐藏在该函数体内。这种类很少使用。
嵌套类是指在一个类体内又定义一个类,定义在类体内的类称嵌套类,定义它的类称 外围类。这两个类的关系是主从关系。嵌套类也很少使用。 19.对象的生存期有何不同?
答:对象的生存期是指对象的寿命。一般地讲,创建的一个对象当它的生存期结束
时,它将被释放,即调用析构函数删除它。 对象按生存期不同可分为下述几种。
(1)局部对象。定义在函数体或程序块内的对象,当退出函数体或程序块时,该对象 被析构。
(2)静态对象。定义时加修饰符static的对象,它们生存期较长,当程序结束时才被 释放。
(3)全局对象。定义在函数体外的对象,它虽定义在某个文件内,但却在程序中可 见,它的生存期也是整个程序。
20.总结本章学过了哪些类的基本知识?如何理解“类是抽象数据类型的实现”? 答:简单总结一下本章所学过的有关类的基本概念。
本章主要讲述面向对象的C++语言的封装性。封装性主要体现在类和对象上。 (1)对象是客观实体的抽象,它是数据与方法的封装。
(2)类是若干相同性质的对象的集合,它是抽象数据类型的实现。
(3)封装体内的私有成员是被隐藏的,外部程序是不可见的,只有通过该类的公有成 员函数或友元函数才能对它操作。封装体具有隐藏性,用户对隐藏的部分不必关心。 (4)封装体是对外接口或称界面,通常是用公有的成员函数作为封装体内与外界的 沟通和联系,它反映了封装体的行为和功能,用户只要关心这些接口就够了。
封装性是高度的抽象,因为它把对一件事情的“如何做”和“做什么”分开了,用户只要关心“做什么”就够了,甚至内部是如何实现的就不必关心了。 5.4 作业题解答 一、选择填空
1.在下列关键字中,用来说明类中公有成员的是( )。
A. Public B. Private C. protected D. friend 答:A。
2.下列的各种函数中,( )不是类的成员函数。
A.构造函数 B.析构函数 C.友元函数 D.拷贝初始化构造函数 答:C。
3.作用域运算符的功能是( )。 A.标识作用域的级别的 B.指出作用域的范围的 C.给定作用域的大小的
D.标识某个成员是属于哪个类的 答:D。
4.( )是不可以作为该类的成员的。 A.自身类对象的指针 B.自身类的对象 C.自身类对象的引用 D.另一个类的对象 答:B。
5.( )不是构造函数的特征。 A.构造函数的函数名与类名相同 B.构造函数可以重载
C.构造函数可以设置默认参数 D.构造函数必须指定类型说明
共分享92篇相关文档