面向对象程序设计
一:名词解释。
引用:
所谓引用就是给对象取一个别名,使用该别名可以存取该对象。换句话说是使新对象和原对象共用一个地址。
内联函数:
内联函数是使用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;
- B. int*p2,p1,*p3;
- C. int p1,*p2=&p1,*p3;
- D. int*p2,p1,*p3=&p1;
2. 若有定义“double xx=3.14,*pp=&xx; ”,则*pp等价于( C )。
- A. &xx
- B. *xx
- C. 3.14
- D. xx
- B. *xx
- C. 3.14
- D. xx
3. 下面对引用的描述中( C )是错误的。
- A. 引用是某个变量或对象的别名
- B. 建立引用时,要对它初始化
- C. 对引用初始化可以使用任意类型的变量
- D.引用与其代表的对象具有相同的地址
- B. 建立引用时,要对它初始化
- C. 对引用初始化可以使用任意类型的变量
- D.引用与其代表的对象具有相同的地址
4. 函数没有返回值的时候,应该选择( A )的函数类型。
- A. void
- B. int
- C. 不确定
- D. float
- B. int
- C. 不确定
- D. float
5. 在函数的定义格式中,下面各组成部分中,( D )是可以省略的。
- A. 函数名
- B. 函数体
- C. 返回值类型
- D. 函数参数
- B. 函数体
- C. 返回值类型
- D. 函数参数
6. 对重载的函数来说,下面叙述不正确的是( D )。
- A. 参数的类型不同
- B. 参数的顺序不同
- C. 参数的个数不同
- D. 参数的个数、类型、顺序都相同,但函数的返回值类型不同
- B. 参数的顺序不同
- C. 参数的个数不同
- D. 参数的个数、类型、顺序都相同,但函数的返回值类型不同
7. 下列有关设臵函数参数默认值的描述中,( D )是正确的。
- A. 对设臵函数参数默认值的顺序没有任何规定
- B. 函数具有一个参数时不能设臵默认值
- C. 默认参数要设臵在函数的原型中,而不能设臵在函数的定义语句中
- D. 设臵默认参数可使用表达式,但表达式中不可用局部变量
- B. 函数具有一个参数时不能设臵默认值
- C. 默认参数要设臵在函数的原型中,而不能设臵在函数的定义语句中
- D. 设臵默认参数可使用表达式,但表达式中不可用局部变量
8. 下面说法正确的是( BC )。
- A. 所有的函数都可以说明为内联函数
- B. 具有循环语句、switch语句的函数不能说明为内联函数
- C.使用内联函数,可以加快程序执行的速度,但会增加程序代码的大小
- D. 使用内联函数,可以减小程序代码大小,但使程序执行的速度减慢
- A. 所有的函数都可以说明为内联函数
- B. 具有循环语句、switch语句的函数不能说明为内联函数
- C.使用内联函数,可以加快程序执行的速度,但会增加程序代码的大小
- D. 使用内联函数,可以减小程序代码大小,但使程序执行的速度减慢
9. 一个函数功能不太复杂,但要求被频繁调用,应选用( A )。
- A. 内联函数
- B. 重载函数
- C. 递归函数
- D. 嵌套函数
- B. 重载函数
- C. 递归函数
- D. 嵌套函数
10. C++对C语言做了很多改进,下列描述中 使得C语言发生了质变,即从面向过程变成面向对象的是( D )。
- A. 增加了一些新的运算符
- B. 允许函数重载,并允许设臵默认参数
- C. 规定函数说明必须用原型
- D. 引进了类和对象的概念
- B. 允许函数重载,并允许设臵默认参数
- C. 规定函数说明必须用原型
- D. 引进了类和对象的概念
四:判断题。
1. C++程序中,不得使用没有定义或说明的变量。
(√)
2. 使用const说明常量时,可以不必指出类型。 (×)
3. 引用被创建时可以用任意变量进行初始化。 (×)
4. 一个返回引用的调用函数可以作为左值。 (√)
5. 函数可以没有参数,也可以没有返回值。 (√)
6. 没有参数的两个函数是不能重载的。 (√)
7. 函数可设臵默认参数,但不允许将一个函数的所有参数都设臵为默认参数。 (×)
8. 运算符new分配的空间由运算符delete释放。 (√)
2. 使用const说明常量时,可以不必指出类型。 (×)
3. 引用被创建时可以用任意变量进行初始化。 (×)
4. 一个返回引用的调用函数可以作为左值。 (√)
5. 函数可以没有参数,也可以没有返回值。 (√)
6. 没有参数的两个函数是不能重载的。 (√)
7. 函数可设臵默认参数,但不允许将一个函数的所有参数都设臵为默认参数。 (×)
8. 运算符new分配的空间由运算符delete释放。 (√)
五:解答题。
1. 名字空间的用途是什么?
名字空间用来防止命名的冲突。
2. 引用有何用处?
除了独立引用外,在C++程序中,引用的主要用途是用作函数参数和函数的返回值。
除了独立引用外,在C++程序中,引用的主要用途是用作函数参数和函数的返回值。
3. 比较值调用和引用调用的相同点与不同点。
在值调用机制中,作为实参的表达式的值被复制到由对应的形参名所标识的一个对象中,作为形参的初始值。函数体对形参的访问、修改都是在这个标识对象上操作的,与实参无关,即数据的传递是单向的。
使用引用作函数的形参时,调用函数的实参要用变量名。实参传递给形参,相当于在被调用函数中使用了实参的别名。于是,在被调用函数中对形参的操作实质是对实参的直接操作,即数据的传递是双向的。
4. 内联函数有什么作用?它有哪些特点?
内联函数是使用inline关键字声明的函数。在程序编译时,编译系统将程序中出现内联函数调用的地方用函数体进行替换,进而减少了程序运行的时间。
特点:
递归函数不能定义为内联函数;
内联函数一般适合于不含有switch和while等复杂的结构且只有1~5条语句的小函数,否则编译系统将该函数视为普通函数;
内联函数只能先定义后使用,否则编译系统也将该函数视为普通函数;
对内联函数也不能进行异常接口声明。
内联函数是使用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;
}
七:程序设计题:写出一个完整的C++程序,使用系统函数pow(x,y)计算x^y的值,注意包含头文件cmath。
#include<iostream> #include<cmath> using namespace std; int main () { float x,y; cout<<"请输入两个数:x,y:"; cin>>x>>y; float z=pow(x,y); cout<<"("<<x<<")"<<"的"; cout<<"("<<y<<")"<<"次方等于"; cout<<z<<endl;
return 0; }