面向对象程序设计教程(c++语言描述)第三章课后习题解题 您所在的位置:网站首页 以下关于对象和类的说法中错误的是 面向对象程序设计教程(c++语言描述)第三章课后习题解题

面向对象程序设计教程(c++语言描述)第三章课后习题解题

2024-01-11 23:24| 来源: 网络整理| 查看: 265

一、 填空题

(1) 类 定 义 中 关 键 字 private 、 public 和 protected 以后的成员的访问权限分别是私有、公 有和保护。如果没有使用关键字,则所有成员默认 定义为 private 权限。具有 public 访问权限的数 据成员才能被不属于该类的函数所直接访问。 (2) 定义成员函数时,运算符“∷”是作用域运 算符, “ MyClass ∷”用于表明其后的成员函数是在 “ MyClass 类”中说明的。

(3) 在程序运行时,通过为对象分配内存来创建 对象。在创建对象时,使用类作为样板,故称对象 为类的实例。

(4) 假定 Dc 是一个类,则执行“ Dc a[10], b (2) ”语句时,系统自动调用该类构造函数的次数 为 11。

【结果分析】

创建 10个数组元素需调用构造函数 10次,创建对 象 b 需调用构造函数 1次,所以系统自动调用该类 构造函数的总次数为 11。

(5) 对于任意一个类, 析构函数的个数最多为 1个。

(6) delete运算符通常用于实现释放该类对象 中指针成员所指向的动态存储空间的任务。

(7) C++程序的内存格局通常分为 4个区:数 据区、代码区、栈区和堆区。

(8) 数据定义为全局变量,破坏了数据的 封装 性; 较好的解决办法是将所要共享的数据定义为 类的 静态成员。

(9) 静态数据成员和静态成员函数可由 任意访 问权限许可的函数访问。

(10) 友元函数和 友元类统称为友元。 (11) 友元的正确使用能提高程序的效率,但破 坏了类的封装性和数据的隐蔽性。

(12) 若需要把一个类 A 定义为一个类 B 的友元 类,则应在类 B 的定义中加入一条语句: friend class A; 。

二、 选择题(至少选一个,可以多选)

(1) 以下不属于类访问权限的是( B ) 。

A. public B. staticC. protectedD. private 【结果分析】

类的访问权限有 public 、 protected 和 private 。 (2) 有关类的说法不正确的是( BC ) 。

A. 类是一种用户自定义的数据类型 B. 只有类的成员函数才能访问类的私有数据成员

C. 在类中,如不做权限说明,所有的数据成员都 是公有的

D. 在类中,如不做权限说明,所有的数据成员都 是私有的

【结果分析】

类是一种用户自定义的数据类型,类中成员均具有 一种访问权限。关键字 public 、 protected 和 private 以后的成员的访问权限分别是公有、保护 和私有的,所有成员默认定义为 private 的。 私有成员是被隐藏的数据,只有该类的成员函数或 友元函数才可以访问它。

(3) 在类定义的外部,可以被任意函数访问的 成员有( C ) 。

A. 所有类成员 B. private 或 protected 的 类成员

C. public的类成员 D. public或 private 的 类成员

【结果分析】

类是一种用户自定义的数据类型,类中成员均具有 一种访问权限。公有成员定义了类的外部接口。私 有成员是被隐藏的数据,只有该类的成员函数或友 元函数才可以引用它。保护成员具有公有成员和私 有成员的双重性质,可以被该类或派生类的成员函 数或友元函数引用。可见在类定义的外部,可以被 任意函数访问的成员是 public 的类成员。

(4) 关于类和对象的说法( C )是错误的。

A. 对象是类的一个实例

B. 任何一个对象只能属于一个具体的类

C. 一个类只能有一个对象

D. 类与对象的关系和数据类型与变量的关系相似 【结果分析】

C++语言的类就是一种用户自己定义的数据类型, 类和对象的关系就相当于基本数据类型与它的变 量的关系,所以任何一个对象只能属于一个具体的 类,但一个类可以有多个对象。

(5) 设 MClass 是一个类, dd 是它的一个对象, pp 是指向 dd 的指针, cc 是 dd 的引用,则对成员 的访问,对象 dd 可以通过( B )进行,指针 pp 可以通过( D )进行,引用 cc 可以通过( B ) 进行。

A. ∷ B. . C. & D. ->

(6) 关于成员函数的说法中不正确的是 ( C ) 。 A. 成员函数可以无返回值

B. 成员函数可以重载 C. 成员函数一定是内联函数 D. 成员函数可以设定参数的默认值 【结果分析】

与普通函数不同的是,成员函数是属于某个类的。 成员函数的实现,可以放在类体内,也可以放在类 体外。在类体外实现的成员函数不再是内联函数。 (7) 下面对构造函数的不正确描述是( B ) 。 A. 系统可以提供默认的构造函数

B. 构造函数可以有参数,所以也可以有返回值 C. 构造函数可以重载 D. 构造函数可以设臵默认参数 【结果分析】

构造函数不能指定返回类型,即使是 void 类型也 不可以,当然不可能有返回值。

(8) 假定 A 是一个类,那么执行语句“ A a, b (3) , *p; ”调用了( B ) 次构造函数。 A. 1 B. 2 C. 3 D. 4

【结果分析】

声明指针是不会调用构造函数的。

(9) 下面对析构函数的正确描述是( AC ) 。 A. 系统可以提供默认的析构函数 B. 析构函数必须由用户定义 C. 析构函数没有参数 D. 析构函数可以设臵默认参数 【结果分析】

析构函数的作用是在对象消失时执行一项清理任 务。如果一个类中没有定义析构函数,系统将自动 生成一个默认析构函数。析构函数没有参数,当然 不可能设臵默认参数。

(10) 类的析构函数是( D )时被调用的。 A. 类创建 B. 创建对象 C. 引用对象 D. 释放对象

(11) 创建一个类的对象时, 系统自动调用 ( B ) ; 撤销对象时,系统自动调用( C ) 。

A. 成员函数 B. 构造函数 C. 析构函数 D. 复制构造函数

(12) 通常拷贝构造函数的参数是( C ) 。 A. 某个对象名 B. 某个 对象的成员名

C. 某个对象的引用名 D. 某个 对象的指针名

(13) 关于 this 指针的说法正确的是( B ) 。

A. this指针必须显式说明 B. 当创建一个对象后, this 指针就指向该对象

C. 成员函数拥有 this 指针 D. 静态成员函数拥有 this 指针。 【结果分析】

this 指针是由 C++编译器自动产生且较常用的一个 隐含对象指针,它不能被显式声明。当创建一个对 象时, this 指针就初始化指向该对象。 但只有非静 态成员函数才拥有 this 指针,并通过该指针来处 理对象。

(14) 下列关于子对象的描述中, ( B )是错误 的。

A. 子对象是类的一种数据成员,它是另一个类的 对象

B. 子对象可以是自身类的对象

C. 对子对象的初始化要包含在该类的构造函数中 D. 一个类中能含有多个子对象作其成员 【结果分析】

子对象不可以是自身类的对象。

(15) 对 new 运算符的下列描述中, ( B )是错 误的。

A. 它可以动态创建对象和对象数组 B. 用它创建对象数组时必须指定初始值 C. 用它创建对象时要调用构造函数

D. 用它创建的对象数组可以使用运算符 delete 来 一次释放 【结果分析】

使用运算符 new 创建对象数组的格式如下:

new []

其中, 给出数组的大小,后面不能再 跟构造函数参数,所以用它创建对象数组时不能指

定初始值。

(16) 对 delete 运算符的下列描述中, ( D ) 是错误的。

A. 用它可以释放用 new 运算符创建的对象和对象 数组

B. 用它释放一个对象时,它作用于一个 new 所返 回的指针

C. 用它释放一个对象数组时,它作用的指针名前 须加下标运算符[ ]

D. 用它可一次释放用 new 运算符创建的多个对象 【结果分析】

用 delete 一次只能释放用 new 创建的 1个对象, 但可释放一个对象数组。

(17) 关于静态数据成员,下面叙述不正确的是 ( C ) 。

A. 使用静态数据成员,实际上是为了消除全局变 量

B. 可以使用“对象名 . 静态成员”或者“类名∷ 静态成员”来访问静态数据成员

C. 静态数据成员只能在静态成员函数中引用

D. 所有对象的静态数据成员占用同一内存单元 【结果分析】

静态数据成员可以在静态成员函数中引用,也可以 在非静态成员函数中引用。

(18) 对静态数据成员的不正确描述是( CD ) 。

A. 静态成员不属于对象,是类的共享成员

B. 静态数据成员要在类外定义和初始化

C. 调用静态成员函数时要通过类或对象激活,所 以静态成员函数拥有 this 指针

D. 只有静态成员函数可以操作静态数据成员 【结果分析】

this 指针是一个局部量, 局部于某个对象, 而静态 成员函数是属于整个类而不是某个对象,它没有 this 指针。 静态成员函数和非静态成员函数均可操 作静态数据成员。

(19) 下面的选项中,静态成员函数不能直接访 问的是( D ) 。

A. 静态数据成员 B. 静态 成员函数

C. 类以外的函数和数据 D. 非静 态数据成员

【结果分析】

由于静态成员函数没有 this 指针,它只能直接访 问该类的静态数据成员、静态成员函数和类以外的 函数和数据,访问类中的非静态数据成员必须通过 参数传递方式得到对象名,然后通过对象名来访 问。

(20) 在类的定义中, 引入友元的原因是 ( A ) 。 A. 提高效率 B. 深化 使用类的封装性

C. 提高程序的可读性 D. 提高 数据的隐蔽性

【结果分析】

友元的作用主要是为了提高效率和方便编程,但友 元破坏了类的封装性和隐蔽性,使用时要权衡利 弊。

(21) 友元类的声明方法是( A ) 。

A. friend class; B. youyuan class;

C. class friend; D. friends class;

(22) 下面对友元的错误描述是( D ) 。

A. 关键字 friend 用于声明友元

B. 一个类中的成员函数可以是另一个类的友元

C. 友元函数访问对象的成员不受访问特性影响

D. 友元函数通过 this 指针访问对象成员

【结果分析】

友元函数是一个放在类中的普通函数, 它没有 this 指针。

(23) 下面选项中, ( C )不是类的成员函数。 A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数

三、 简答题

(1) 类与对象有什么关系?

【问题解答】

类是一种用户自己定义的数据类型,和其他数据类 型不同的是,组成这种类型的不仅可以有数据,而 且可以有对数据进行操作的函数。程序员可以使用 这个新类型在程序中声明新的变量,具有类类型的 变量称为对象。创建对象时,类被用做样板,对象 称为类的实例。

(2) 类定义的一般形式是什么?其成员有哪几种 访问权限?

【问题解答】

定义类一般形式为:

class 类名 {

public:

protected:

private:

};

访问权限共有 3种:分别是公有(public ) 、保护 (protected )和私有(private ) 。

(3) 类的实例化是指创建类的对象还是定义类? 【问题解答】

指创建类的对象。

(4) 什么是 this 指针?它的主要作用是什么? 【问题解答】

this 指针是 C++语言为成员函数提供的一个隐含对 象指针, 它不能被显式声明。 this 指针是一个局部 量,局部于某个对象。不同的对象调用同一个成员 函数时,编译器根据 this 指针来确定应该引用哪 一个对象的数据成员。

(5) 什么叫做拷贝构造函数?拷贝构造函数何时 被调用?

【问题解答】

拷贝构造函数是一种特殊的构造函数,它的作用是 用一个已经存在的对象去初始化另一个对象。为了 保证所引用的对象不被修改,通常把引用参数声明 为 const 参数。

在以下 3种情况下, 拷贝构造函数都会被自动调用:◆当用类的一个对象去初始化该类的另一个对象 时;

◆当函数的形参是类的对象,进行形参和实参结合 时;

◆当函数的返回值是类的对象,函数执行完成返回 调用者时。

四、 程序分析题(写出程序的输出结果,并分析 结果)

(1)

#include

using namespace std;

class Test

{

private:

int num; public:

Test () ;// 默认构造函数

Test (int n) ; // 带一个参数构造函数 };

Test ∷ Test ()

{

cout

Test x[2];// 语句 1

Test y(15) ; // 语句 2

return 0;

}

【输出结果】

Init defa

Init defa

Init 15

【问题分析】

本题主要考查构造函数的调用时机和构造函数的 匹配问题。

【要点提示】

构造函数在创建对象时被自动调用,具体调用哪个 构造函数将由编译系统根据重载函数的匹配原则 来确定。

【结果分析】

① 程序声明了 2个对象 x 和 y , 类中有 2个构造函 数。

② 程序首先执行语句 1,创建对象 x ,调用默认构 造函数。由于对象 x 是对象数组,每个数组元素被 创建时都要调用构造函数,所以默认构造函数被调 用了 2次,输出第 1、 2行结果。程序接着执行语 句 2,创建对象 y ,调用带一个参数的构造函数, 输出第 3行结果。

(2)

#include

using namespace std;

class Xx

{

private:

int num;

public:

Xx (int x) {num=x;} // 构造函数

~Xx() {cout

public:

Whole (int i) ; // Whole的有参构造函数 Whole () {}; // Whole的无参构造函数

~Whole() ; // Whole的析构函数

private:

int num;

};

Book ∷ Book (int w)

{

num=w;

sumnum-=w;

}

int Book∷ sumnum=120;// 语句 1

int main()

{

Book b1(20) ;// 语句 2

Book b2(70) ;// 语句 3

cout



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有