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

一、 名词解释

引用内联函数重载函数

【问题解答】

所谓引用就是给对象取一个别名,使用该别名可以 存取该对象。换句话说是使新对象和原对象共用一 个地址。

内联函数是使用 inline 关键字声明的函数。 重载函数指在同一个作用域内名字相同而参数不 同的函数。重载函数通常用来对具有相似行为而数 据类型或数据个数不同的操作提供—个通用的名 称。

二、 填空题

(1) 一般情况下, 用 C++语言编写的程序是由 函 数 加上 类 组成的。

(2) C++有两种注释符号,一种是 //,另一种是 /*…… */。

(3) 使用 C++风格的输入输出, 在程序中必须包 含头文件“ iostream ” 。

(4) cin 是预定义的标准输入流对象, >>是输入 操作符,也称提取运算符。

(5) cout 是预定义的标准输出流对象, <<是输出 操作符,也称插入运算符。

(6) 指针的值是它所指向那个对象的 地址值 。 指针的类型是它所指向对象的 类型 。 指针的内容便 是它所指向对象的 值 。

(7) C++使用运算符 & 来定义一个引用,对引 用的存取都是对它所引用的 对象 的存取。

(8) 当一个函数调用出现在函数定义之前时,必 须先用函数原型对函数进行 声明 。

(9) C++有 值传递 和 引用传递 两种参数传递机 制。

(10) 使用关键字 inline 声明的函数称为内联函 数。

(11) 运算符 new 用于进行动态内存分配,运算 符 delete 用于释放动态分配的内存。

(12) 下面程序的输出结果为 x=10, y=10; x=100, y=100。

#include<iostream>

using namespace std;

int main()

{int x=10, &y=x;

cout<<"x="<<x<<", y="<<y<<endl; int *p=&y;

*p=100;

cout<<"x="<<x<<", y="<<y<<endl;

return 0;

}

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

(1) 在整型指针变量 p2、 p3的定义中,错误的 是( A ) 。

A. int p1, *p2, p3; B. int*p2, p1, *p3; C. int p1, *p2=&p1, *p3; D. int*p2, p1, *p3=&p1;

【结果分析】

指针定义的具体格式如下所示:

<类型 > *<指针名 1>, *<指针名 2>,… ;

(2) 若有定义“ double xx=3.14, *pp=&xx; ” , 则 *pp等价于( C ) 。

A. &xxB. *xxC. 3.14D. xx

【结果分析】

pp 指向 xx 所在的内存单元,这样 *pp和 xx 等价。 (3) 下面对引用的描述中( C )是错误的。

A. 引用是某个变量或对象的别名

B. 建立引用时,要对它初始化

C. 对引用初始化可以使用任意类型的变量

D. 引用与其代表的对象具有相同的地址

【结果分析】

所谓引用就是给对象取一个别名,使用该别名可以 存取该对象,所以对引用初始化必须使用同类型的 变量。

(4) 函数没有返回值的时候,应该选择( A ) 的函数类型。

A. void B. int C. 不确定 D. float (5) 在函数的定义格式中,下面各组成部分中, ( D )是可以省略的。

A. 函数名 B. 函数体 C. 返回值类型 D. 函数参数

【结果分析】

函数的定义可以缺省形式参数,此时称为无参函 数。

(6) 对重载的函数来说,下面叙述不正确的是 ( D ) 。

A. 参数的类型不同

B. 参数的顺序不同

C. 参数的个数不同

D. 参数的个数、类型、顺序都相同,但函数的返

回值类型不同

【结果分析】

对重载的函数来说,编译系统将根据函数参数的类 型和个数来判断使用哪一个函数,所以重载函数参 数的个数、类型、顺序不能都相同。

(7) 下列有关设臵函数参数默认值的描述中, ( D )是正确的。

A. 对设臵函数参数默认值的顺序没有任何规定

B. 函数具有一个参数时不能设臵默认值

C. 默认参数要设臵在函数的原型中,而不能设臵 在函数的定义语句中

D. 设臵默认参数可使用表达式,但表达式中不可 用局部变量

【结果分析】

在 C++中,在函数原型中可以为一个或多个参数指 定默认值。对函数参数设臵默认值要注意以下几 点。

◆若没有声明函数原型,参数的默认值可在函数定 义的头部进行设臵,否则必须在函数原型中进行设 臵。

◆在一个指定了默认值的参数右边不能出现没有 指定默认值的参数。

◆设臵默认参数可使用表达式,但表达式中不可用 局部变量。

(8) 下面说法正确的是( BC ) 。

A. 所有的函数都可以说明为内联函数

B. 具有循环语句、 switch 语句的函数不能说明为 内联函数

C. 使用内联函数,可以加快程序执行的速度,但 会增加程序代码的大小

D. 使用内联函数,可以减小程序代码大小,但使 程序执行的速度减慢

【结果分析】

内联函数主要是解决程序的运行效率问题。在程序 编译时,编译系统将程序中出现内联函数调用的地 方用函数体进行替换,进而减少了程序运行的时 间,但会增加程序代码的大小。它是以空间换取时 间,因此内联函数适用于功能不太复杂,但要求被 频繁调用的函数。

(9) 一个函数功能不太复杂, 但要求被频繁调用, 应选用( A ) 。

A. 内联函数 B. 重载函数 C. 递归函 数 D. 嵌套函数

(10) C++对 C 语言做了很多改进,下列描述中 使得 C 语言发生了质变,即从面向过程变成面向对 象的是( D ) 。

A. 增加了一些新的运算符

B. 允许函数重载,并允许设臵默认参数

C. 规定函数说明必须用原型

D. 引进了类和对象的概念

【结果分析】

面向对象 =对象 +类 +继承 +消息 +多态

四、 判断题

(1) C++程序中,不得使用没有定义或说明的变 量。 (√ )

(2) 使用 const 说明常量时, 可以不必指出类型。 (×)

【结果分析】

如果用 const 定义的是一个整型常量, 则类型说明 符 int 可以省略。

(3) 引用被创建时可以用任意变量进行初始化。 (×)

【结果分析】

对引用初始化必须使用同类型的变量。

(4) 一个返回引用的调用函数可以作为左值。 (√ )

(5) 函数可以没有参数,也可以没有返回值。 (√ )

(6) 没有参数的两个函数是不能重载的。 (√ )

(7) 函数可设臵默认参数,但不允许将一个函数 的所有参数都设臵为默认参数。 (×)

【结果分析】

函数可设臵默认参数,且允许将一个函数的所有参 数都设臵为默认参数。

(8) 运算符 new 分配的空间由运算符 delete 释 放。 (√ )

五、 简答题

(1) 名字空间的用途是什么?

【问题解答】

名字空间用来防止命名的冲突。

(2) 引用有何用处?

【问题解答】

除了独立引用外,在 C++程序中,引用的主要用途 是用作函数参数和函数的返回值。

(3) 比较值调用和引用调用的相同点与不同点。 【问题解答】

在值调用机制中,作为实参的表达式的值被复制到 由对应的形参名所标识的一个对象中,作为形参的


初始值。函数体对形参的访问、修改都是在这个标 识对象上操作的,与实参无关,即数据的传递是单 向的。

使用引用作函数的形参时,调用函数的实参要用变 量名。实参传递给形参,相当于在被调用函数中使 用了实参的别名。于是,在被调用函数中对形参的 操作实质是对实参的直接操作,即数据的传递是双 向的。

(4) 内联函数有什么作用?它有哪些特点? 【问题解答】

内联函数是使用 inline 关键字声明的函数。在程 序编译时,编译系统将程序中出现内联函数调用的 地方用函数体进行替换,进而减少了程序运行的时 间。

使用内联函数应注意以下几点。

◆递归函数不能定义为内联函数。

◆内联函数一般适合于不含有 switch 和 while 等 复杂的结构且只有 1~5条语句的小函数,否则编译 系统将该函数视为普通函数。

◆内联函数只能先定义后使用,否则编译系统也将 该函数视为普通函数。

◆对内联函数也不能进行异常接口声明。

(5) 函数原型中的参数名与函数定义中的参数名 以及函数调用中的参数名必须一致吗?

【问题解答】

不必一致。所有的参数是根据位臵和类型而不是名 字来区分的。

(6) 重载函数时通过什么来区分?

【问题解答】

编译系统将根据函数参数的类型和个数来判断使 用哪一个函数。

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

#include<iostream>

using namespace std;

int main()

{int num=50;

int& ref=num;

ref=ref+10;

cout<<"num="<<num<<endl;

num=num+40;

cout<<"ref="<<ref<<endl;

return 0;

} 【输出结果】

num=60

ref=100

【问题分析】

本题主要考查引用的含义。

【结果分析】

程序首先定义一个 int 类型的对象 num ,并给它赋 初始值 50。 然后又定义了一个 int 类型的引用 ref , 并将它和 num 相联系。这样,无论是对 num 还是对 ref 进行操作, 实际上都是对那个一开始放着 50的 物理单元的内容进行操作。

七、 程序设计题

写出一个完整的 C++程序,使用系统函数 pow (x , y )计算 xy 的值,注意包含头文件 cmath 。

【问题分析】

本题主要考查简单的输入输出和标准库函数的调 用方法。

【解题思路】

① 由于要用到系统函数 pow (x , y ) ,所以要包含 头文件 cmath 。

② 要计算 xy 的值,首先必须知道 x 和 y 的值。为 了程序的通用性,最好通过交互的方式输入 x 和 y 的值。

// xt2_1.cpp

#include<iostream>

#include<cmath>

using namespace std;

int main()

{float x, y;

cout<<"please input 2 floats to x, y:"; cin>>x>>y;

float z=pow(x , y ) ;

cout<<"pow("<<x<<", "<<y<<") ="<<z<<endl; return 0;}

【输出结果】

please input 2 floats to x, y:3.1 2

pow (3.1, 2) =9.61


  • 13
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值