面向对象程序设计教程 答案 下载本文

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

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

x=100,y=100。

#include

using namespace std;

int main() {

int x=10,&y=x;

cout<<\,y=\

int *p=&y;

*p=100;

cout<<\,y=\

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等价于(A. &xxB. *xxC. 3.14D. xx 【结果分析】

pp指向xx所在的内存单元,这样*pp和xx等价。 (3) 下面对引用的描述中( C )是错误的。 A. 引用是某个变量或对象的别名 B. 建立引用时,要对它初始化

)。 C 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

using namespace std;

int main() {

int num=50;

int& ref=num;

ref=ref+10;

cout<<\

num=num+40;

cout<<\

return 0; }

【输出结果】

num=60

ref=100