Cout<
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.静态成员函数是类的成员, 友元 函数不是类的成员。
3-13.C++类的组成包括数据成员和 成员函数 ,友元 不是 (是、不是)该类的成员函数。
3-14.友元函数是用关键字 friend 修饰的非成员函数。
3-15.使用友元函数是为了提高程序效率。且节约了 调用类的成员函数 的开销。
3-16.假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类的构造函数的次数为 10 。
3-17.复制构造函数用它所在的类的 引用 作为参数。
4-1.运算符重载应保持原来的 优先级 、 结合性 和 运算顺序 。
4-2.重载运算符必须和用户定义的自定义类型的对象一起使用,
- 21 -
其参数至少应有一个是 类对象(或类对象的引用) 。
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.采用公用继承时,基类的公用成员在派生类中是 公用 成
- 22 -
员,基类的保护成员在派生类中是 保护 成员,基类的私有成员在派生类中是 不可访问的 成员。 5-7.采用私有继承时,基类的公用成员在派生类中是 私有 成员,基类的保护成员在派生类中是 私有 成员,基类的私有成员在派生类中是 不可访问的 成员。 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流类库 。
- 23 -
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.引用和指针都可作函数参数。( √ ) 1-3.引用可以不初始化。( × )
1-4.内置函数的定义必须出现在第一次调用内置函数之前。( √ )
1-5.字符串\sdfgh\的长度是5。( √ )
1-6.将字符串常量存放到字符串变量时,包含字符串本身和结束符“\\0”。( × )
1-7.关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。( √ )
1-8.使用new运算符创建数组时,可以为该数组指定初始值( × )。
2-1.C++语言支持封装性和继承性,不支持多态性。( × )。 2-2.在用class定义一个类时,如果不加声明,数据成员和成员函数默认的访问权限是public。( × )
2-3.在设计类时一般把数据成员设置为私有的,把函数成员设置为公用的,从而实现了公用接口和私有实现的分离。( √ )
- 24 -
3-1.构造函数可以重载。( √ )
3-2.在调用构造函数时不必给出实参的构造函数称为默认构造函数。一个类只能有一个默认构造函数。( √ )
3-3.对使用默认参数的构造函数,如果在类外定义构造函数,应该在定义构造函数时指定默认值( × )。
3-4.析构函数不能被继承。( √ )
3-5.析构函数必须指定返回类型以及函数参数。( × ) 3-6.如果定义了一个类的对象数组,该数组有10个元素,则要调用10次构造函数来对每个元素初始化。( √ )。
3-7.友元函数说明在类体内,它是一种成员函数。( × ) 3-8.友元类必须被说明为公用成员。( × )
4-1.C++允许用户可以定义新的运算符。例如,可将“**”定义为幂运算符。( × )
4-2.C++中的所有运算符都允许重载。( × ) 4-3.重载函数不能改变运算符运算对象的个数。( √ ) 4-4.运算符重载以后,其优先级和结合性都不能改变。( √ ) 4-5.重载单目运算符作为类的成员函数,函数没有参数。( √ )
4-6.将运算符“+”函数重载为类的成员函数,交换律不适用。( √ )
5-1.不能通过派生类对象引用从私有基类继承过来的任何成员。( √ )
5-2.若类Y是类X的私有派生类,类Z是类Y的公用派生类,则类Z不能访问类X 的公用成员和保护成员。( √ )
5-3.私有继承的派生类不能访问基类中的私有成员,但公用继承的派生类可以访问基类中的私有成员。( × )
5-4.若类B是类A的私有派生类,类C是类B的私有派生类,则类C可访问类A的公用成员。( × )
5-5.在声明派生类时,派生类把基类的的构造函数也一起继承过来。( × )
5-6.派生类能够继承基类的析构函数。( × )
5-7.使用虚函数可以避免多重继承产生的二义性。( √ )
6-1.C++中设置虚基类的目的是实现运算时的多态性。( √ ) 6-2.在类的继承层次结构中,在不同的层次中不能出现名字相同、
- 25 -