面向对象程序设计综合练习题 联系客服

发布时间 : 星期三 文章面向对象程序设计综合练习题更新完毕开始阅读c7301b2aaaea998fcc220ef1

A. istream B. ostream C. iostream D. fstream 7-11.以下的函数中,( A )不是用于字符输入的。 A.cout.put('a') B.cin.get()

C.cin.get(ch) D.cin.get(ch,10, '\\n') 7-12.关于文件,以下说法不正确的是( C )。

A.用户常用的文件有程序文件和数据文件两大类

B.根据数据的组织形式,文件可分为ASCII文件和二进制文件

C.对于字符信息,用ASCII文件输出和用二进制文件输出,其形式是不同的 D.对于数值数据,用ASCII文件和用二进制文件所占内存空间是不同的

8-1.以下说法中,正确的是( C )。

A.编译系统能发现语法错误,也能发现运行错误

B.程序能通过编译,也能运行,就能得到正确的运行结果

C.程序能通过编译,也能运行,不一定能得到正确的运行结果 D.发现运行错误比发现编译错误较容易

8-2.C++处理异常的机制有3部分组成,即( B )。 A.检查(try)、捕捉(catch)和纠错(error correction) B.检查(try)、抛出(throy)和捕捉(catch) C.检查(try)、捕捉(catch)和处理(heandl) D.检查(try)、抛出(throy)和处理(heandl) 8-3.关于异常处理,以下说法不正确的是( C )。

A.被检测的函数必须放在try块中 B. try块和catch块作为一个整体出现

C.catch既要检查所捕获的异常信息的类型,也检查它们的值

D.如果throw抛出的异常信息找不到与之匹配的catch块,程序终止运行 8-4.关于命名空间,以下说法不正确的是( D )。

A.命名空间实际上是一个由程序设计者命名的内存区域

B.命名空间的作用是建立一些互相分隔的作用域,以免产生名字冲突 C.全局变量独立于所有有名的命名空间之外,不需声明命名空间 D.不能在一个命名空间内再定义一个命名空间

二、填空题

1-1.C++预定义的标准流包括 cin 、 cout 、cerr和clog。

1-2.要把PI=3.14159定义为常变量,定义语句是 const float PI=3.14259 。 1-3.重载函数在函数类型或参数个数上不同,但 函数名 相同。

1-4.函数重载时,编译系统会根据 形参的类型 或 形参的个数 来区分,与返回类型无关。

1-5.所有的函数模板都是以 template 关键字和一个形参表开头的。

1-6.设函数max是由函数模板实现的,并且max(3.5,5)和max(2,5)都是正确的函数调用,则此函数模板具有 2 个类型参数。

1-7.如果一个函数既作为重载函数,又作为有默认值的函数,当调用函数时如果少写了一个参数,会出现 二义性 。

1-8.引用通常用作函数的 参数 和返回值。

1-9、C++语言的函数参数传递方式有 传值 和 传址 。

- 13 -

1-10要把一个函数指定为一个内置函数,有在函数首行的左端加一个关键字 inline 。

1-11.在C++中,用动态分配/撤消内存运算符 new 和 delete 分别取代C中的malloc和free函数。

1-12.New的功能是 动态申请 内存空间,delete的功能是 释放由new申请的 内存空间。

1-13.使用函数模板的方法是先说明函数模板,然后实例化成相应的 模板函数 进行调用、执行。

2-1.对象的三大特征是 封装 、 继承 和 多态 。

2-2.对象的三大基本特性是多态性、 继承 、封装性。

2-3.在C++类中可以包含 公共 、 保护 和 私有 三种具有不同访问控制权的成员。

2-4.如果在类的定义中既不指定private,也不指定public,则系统默认为是 私有的(private) 。

2-5.如果在类外定义成员函数,必须在函数名前加上类名和 作用域限定符“::” 。 2-6.在以下程序段的空白处填上合适的语句: Class Time {public: Int hour; Int minute;

} ; Time t,*p P=&t ;;

Cout<hour ; //输出p指向的对象中的成员hour 2-7.类的具体表现是通过创建 对象 来操作的。

3-1.构造函数的作用是 处理对象的初始化 。

3-2.析构函数的作用是 在撤消对象占用的内存之前完成一些清理工作 。 3-3.如果一个类的名称是Student,则它的析构函数名为 ~Student() 。 3-4.一个类可以有 多 个构造函数,有 一 个析构函数。

3-5.每一个成员函数都包含一个特殊的指针,这个指针称为 this ,它是指向本类对象的指针,它的值是当前被调用的成员函数所在对象的的 起始地址 。

3-6.如果要在定义对象时指定对象为常对象,应在对象名之前加上关键字 const 。

3-7.一个const对象只能访问 const 成员函数。

3-8.常成员函数 可以 访问常对象中的数据成员, 不允许 修改常对象中成员函数的值。

3-9. 若希望用一个已有对象构造另一个同类型的对象,可以使用 复制构造函数 来实现。

3-10.静态成员(static)属于 类 ,而不属于 任何一个对象 ,它被同一个类的所有对象共享。

3-11.由static修饰的数据成员为该类的所有对象 共享 。 3-12.静态成员函数是类的成员, 友元 函数不是类的成员。

- 14 -

3-13.C++类的组成包括数据成员和 成员函数 ,友元 不是 (是、不是)该类的成员函数。

3-14.友元函数是用关键字 friend 修饰的非成员函数。

3-15.使用友元函数是为了提高程序效率。且节约了 调用类的成员函数 的开销。 3-16.假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类的构造函数的次数为 10 。

3-17.复制构造函数用它所在的类的 引用 作为参数。

4-1.运算符重载应保持原来的 优先级 、 结合性 和 运算顺序 。 4-2.重载运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是 类对象(或类对象的引用) 。

4-3.重载双目运算符“+”,如果作为类成员函数,它应有 1 个参数;如果作为友元函数,它应有 2 个参数。

4-4.在C++中,一般将单目运算符重载为 成员 函数,将双目运算符重载为 友元 函数。

4-6.重载运算符的含义必须清楚,不能有 二义性 。

4-7.重载运算符“<<”的函数名为 operator<< 。

4-8.重载流插入运算符“>>”的函数的第一个参数和函数的类型必须是 istream& 类型,第二个参数是 是要进行输入操作的类 。因此只能将它作为 友元 函数,不能把它定义为 成员 函数。

4-9.重载流提取运算符“<<”的函数的第一个参数和函数的类型必须是 ostream& 类型,第二个参数是 是要进行输出操作的类 。因此只能将它作为 友元 函数,不能把它定义为 成员 函数。

4-10.在C++中,实现标准类型之间的转换有 隐式 类型转换和 显式 类型转换。要将89.5转换为整数89,应写语句 int(89.5) 。

4-11.转换构造函数的作用是 将一个其他类型的数据转换成指定类的对象 。用转换构造函数将double型的参数r转换为复数Complex类的对象,定义函数的语句为: Complex(double r) {real=r;imag=0;}

4-12.类型转换函数的作用是 将一个类的对象转换成另一类型的数据 。类型转换函数不能指定函数类型,也没有参数,只能作为 成员 函数,不能作为 友元 函数。

5-1.面向对象程序设计有4个主要特点: 抽象 、 封装 、 继承 和 多态性 。 5-2.在C++中,可重用性是通过 继承 机制来实现的。

5-3.类的继承方式有 public(或公用) 继承、 private(或私有) 继承和 protected(或保护) 继承。

5-4.在声明派生类时,如果不指定继承方式,则默认为 private(私有的) 。

5-5.派生类对基类继承控制访问有三种。派生类可以定义其基类中不具备的 数据和操作 。

5-6.基类的公用成员在私有派生类中是 私有 成员,基类的保护成员在公用派生类中是 保护 成员。

5-7.采用公用继承时,基类的公用成员在派生类中是 公用 成员,基类的保护成员在派生类中是 保护 成员,基类的私有成员在派生类中是 不可访问的 成员。

5-7.采用私有继承时,基类的公用成员在派生类中是 私有 成员,基类的保护成员在派生类中是 私有 成员,基类的私有成员在派生类中是 不可访问的 成员。

- 15 -

5-8.采用保护继承时,基类的公用成员在派生类中是 保护 成员,基类的保护成员在派生类中是 保护 成员,基类的私有成员在派生类中是 不可访问的 成员。

5-9.如果在多级派生时都采用公用继承方式,直到最后一级派生类都能访问基类的 公用 成员和 保护 成员。如果采用私有的继承方式,经过若干次派生后,基类的 所有 成员会变得不可访问的。

5-10.在一个基类只有一级派生时,执行构造函数的顺序是:派生类构造函数先调用 基类 的构造函数,再执行 派生类的构造函数本身 。 在派生类的对象释放时,先执行 派生类 的析构函数,在执行 基类 的析构函数。

5-11.声明虚基类的一般形式为:

Class 派生类名: virtual 继承方式 基类名

6-1.在C++中,函数重载与虚函数帮助实现了类的 多态 性。

6-2.从系统实现的角度看,多态性分为两类: 静态多态性 和 动态多态性 。函数重载和运算符重载实现的是多态性属于 静态多态性 ,通过虚函数实现的多态性属于 动态多态性 。

6-3.确定调用的具体对象的过程称为关联。按照关联所处阶段的不同(如编译阶段、运行阶段),关联分为 静态关联 和 动态关联 。

6-4.当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、 函数名 、 参数个数 、参数类型以及参数的顺序都必须与基类中的原型完全相同。

6-5.如果一个类中至少有一个纯虚函数,则该类称为 抽象类 。

7-1.C++的输入输出包括3方面的内容: 标准的输入输出 、 文件的输入输出 和 字符串输入输出 。

7-2.C++的I/O是以 字节流 的形式实现的,每个C++编译相同都带有一个面向对象的输入/输出软件包,这就是 I/O流类库 。

7-3.C++的的抽象基类ios派生出四个类,它们是 istream 、 ostream 、 fstreambase 和 strstreanbase 。

7-4.Iostream文件中定义的4种流对象是 cin 、 cout 、 cerr 和 clog 。

7-5.读入一个字符可以用 cin.get 函数,读入一行字符可以用 cin.getline 函数;输出一个字符可以用 cout.put 函数。

7-6.常用的文件有两大类: 程序文件 和 数据文件 。

7-7.根据文件的组织形式,文件可分为 ASCII文件 和 二进制文件 。

8-1.程序中常见的错误有两大类: 语法错误 和 运行错误 。

8-2.C++处理异常的机制是由3个部分组成的,即 检查(try) 、 抛出(throw) 和 捕捉(catch) 。 8-3.可以利用命名空间来解决 名字冲突 问题。标准C++库是所有标识符都是在一个名为 std 的命名空间中定义的。

三、是非判断题

1-1.C++只能用于面向对象程序设计,不适用于面向过程程序设计。( × ) 1-2.引用和指针都可作函数参数。( √ )

- 16 -