1、 重庆交通大学电信类 15级 C+面向对象程序设计课程复习题(2016年 5月)一、选择题1. 以下说法中正确的是(B )。A. C+程序总是从第一个定义的函数开始执行B. C+程序总是从main函数开始执行2. 下面有关构造函数的描述中,正确的是(BA. 构造函数可以带有返回值)。B. 构造函数的名字与类名完全相同D. 构造函数必须定义,不能缺省C. 构造函数必须带有参数3. 在声明类时,下面的说法正确的是(C )。A. 可以在类的声明中给数据成员赋初值B. 数据成员的数据类型可以是registerC. private,public,protected可以按任意顺序出现D. 没有用priva
2、te,public,protected定义的数据成员是公有成员4.在下面有关析构函数特征的描述中,正确的是(CA. 一个类可以有多个析构函数)。B. 析构函数与类名完全相同D. 析构函数可以有一个或多个参数C. 析构函数不能指定返回类型5.构造函数是在(B )时被执行的。A. 程序编译 B. 创建对象 C. 创建类 D. 程序装入内存6. 下面有关静态成员函数的描述中,正确的是(B)A. 在静态成员函数中可以使用this指针B. 在建立对象前,就可以为静态数据成员赋值C. 静态成员函数在类外定义是,要用static前缀D. 静态成员函数只能在类外定义7.下面有关友员函数的描述中,真确的说法是(
3、AA. 友员函数是独立于当前类的外部函数)B. 一个友员函数不可以同时定义为两个类的友员函数C. 友员函数必须在类的外部进行定义D. 在类的外部定义友员函数时必须加上friend关键字1C. C+函数必须有返回值,否则不能使用函数D. C+程序中有调用关系的所有函数必须放在同一个程序文件中8.友员的作用之一(A)A. 提高程序的运行效率 B. 加强类的封装C. 实现数据的隐蔽性 D. 增加成员函数的种类9.使用派生类的主要原因是(AA. 提高代码的可重用性C. 加强类的封装性)B. 提高程序的运行效率D. 实现数据的隐藏10.在C+中继承方式有几中(C )A. 1 B. 2 C. 3 D. 4
4、11.派生类的对象对它的基类成员中( A)是可以访问的。A.公有继承的公有成员;C.公有继承的保护成员;B.公有继承的私有成员;D.私有继承的公有成员。12. 类中定义的成员默认为( B )访问属性。A. public B. private C. protected D. friend13.下列存储类标识符中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用(A )合适。A. 内联函数; B. 重载函数; C. 递归调用; D. 嵌套调用。14.C+对C语言作了很多改进,下列描述中( D )使得C语言发生了质变,从面向过程变成了面向对象。A. 增加了一些新的运算符;C. 规定函
5、数说明必须用原型;B. 允许函数重载,并允许设置缺省参数;D. 引进了类和对象的概念;15.按照标识符的要求,(A )符号不能组成标识符。A. 连接符 B. 下划线 C.大小写字母 D. 数字字符16.下列变量名中,(AA CHINA)是合法的。B byte-size C double D A+a17.下列各种函数中,(C )不是类的成员函数。A 构造函数 B 析构函数 C 友元函数 D 拷贝构造函数18.下列(A )是正确的语句。A ; B a=17 C x+y D cout和作用域运算符;D. 静态数据成员不是所有对象所共用的。48. ( A)是析构函数的特征。A. 一个类中只能定义一个析
6、构函数;C. 析构函数的定义只能在类体内;B. 析构函数与类名没有关系;D. 析构函数可以有各个或多个参数。;49. 已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,(C )是正确的。A. A1.p=5;C. A.*p=5;B. A1-p=5;D. *A1.p=5;50. 派生类的构造函数的成员初始化列中,不能包含( C )。A. 基类的构造函数;B. 派生类中子对象的初始化;C. 基类的子对象初始化;D. 派生类中一般数据成员的初始化51. 派生类的对象对它的基类成员中( A)是可以访问的。A. 公有继承的公有成员;B. 公有继承的私有成员;C. 公有继承的
7、保护成员;D. 私有继承的公有成员。52C+类体系中,不能被派生类继承的有(A )。A.构造函数 B.虚函数 C.静态成员函数 D.赋值操作函数53下面标识符中正确的是(A )。A_abc B3ab C int D+ab54下列哪项(D )不是面向对象程序设计的主要特征?a.封装 b.继承 c.多态 d.结构6二、填空题1. C+语言的头文件与源程序文件扩展名分别是(.h )和(.cpp) 。2. 在C+程序中使用基本输入与输出流时需要包含的头文件名是( )3. 在C+语言中,惟一的一个三目运算运算符是(? :4. C+中当一个函数无返回值时,则函数的类型是(void)。)。5. 一个类中可以
8、有(多 )个构造函数,只能有(一 )个析构函数。6.一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为(私有 )权限,而把成员函数(方法)定义为(公有 )权限.7.在定义类的对象时,C+程序将自动调用该对象的(构造) 函数初始化对象自身.在撤销类的对象时,C+程序将自动调用该对象的(析构 ) 函数.8.类继承中,缺省的继承方式是(私有继承 ).9在C+语言中,用转义字符序列(n10表达式a=al表示成增量表达式为(+a)或操纵符(endl)。)表示输出一个换行符。11当不需要函数返回任何值时,则应把该函数类型定义为(void )。12用于输出表达式值的标准输出流对象是(cout )
9、。,用于从键盘上为变量输人值的标准输人流对象是(cin )。13、变量分为全局和局部两种,(全局变量默认初始化为0 )。变量没有赋初值时,其值是不确定的。14、假定类 AB 中有一个公用属性的静态数据成员 bb,在类外不通过对象名访问该成员 bb的写法为(AB:bb )。15、类的成员分为数据成员和成员函数。16、一个类和对象的关系,正如基本数据类型与该类型的变量一样,如int x;。17、对一个类中的数据成员的初始化可以通过构造函数中的赋值实现,也可以通过构造函数中的初始化列表实现。18、类有两种用法:一种是定义对象,即生成类的对象;另一种是通过派生,派生出新的类。19、C+语言提供的 多态
10、机制允许一个派生类继承多个基类,即使这些基类是相互无关的。20、声明虚函数的方法是在基类中的成员函数原型前加上关键字virtual。21、如果一个类中有一个或多个纯虚函数,则这个类称为 虚基类。22、静态数据成员在定义或说明时,前面要加上关键字static。23、如果成员函数不需要访问类的非静态成员,则可以把它声明为静态成员函数。24、友元可以是全局函数,也可以是 其他成员函数 。25、若需要把一个函数“void fun();”定义为一个类A的友元函数,则应在类A的定义中加入一条语句:friend void fun()。26、运算符函数中的关键字是operator,它和运算符一起组成该运算符函
11、数的函数名。729、构造函数是对象被创建时自动执行,对象消失时自动执行的成员函数称为析构函数。30、如果类A继承了类B,则类A称为派生类,类B称为基类。31、如果一个特定的类型S当且仅当它提供了类型T的行为时,则称类型S是类型T的子类。34、友元函数的声明可以放在类的私有部分,也可以放在类的公有部分,它们是没有区别的。35、如果说类B是类A的友元类,则类B的所有成员函数都是类A的成员函数。36、设a和b是两个整型变量,我们用a+b的形式求这两个变量的和;设c和d为浮点型变量,我们用c+d的形式求这两个变量的和。显然运算符“+”具有不同的用途,这是运算符重载的例子。37、当建立 新的对象 时,程
12、序自动调用该类的构造函数。38、 在C+中有二种参数传递方式:传值和引用。39、 模板对处理数据的类型的要求不同可以分为两种类型:函数模板和类模板。40、 异常是通过检查(try) 抛出(throw)和捕捉(catch)来实现的。41、 虚函数实现了C+的 多态机制,类实现了C+的 封装机制。42、 面向对象程序设计的继承机制提供了重复利用程序资源的一种途径。三、问答题 (请以谭浩强版教材为重点,理解和掌握下列基本概念,做出简明扼要的回答,内容自行翻书 )1. 在C+中,结构(struct)和类(class)的区别是什么?答:在c里结构体只能定义数据成员,不能有函数成员,但可以定义函数指针来模
13、拟函数。在C+中,结构体和类除了默认的访问方式和默认的继承方式不同外,其它都一样。结构体默认是公有,类默认是私有。2. 构造函数和析构函数的主要作用是什么?答:构造函数只是起初始化值的作用,但实例化一个对象的时候,可以通过实例去传递参数,从主函数传递到其他的函数里面,这样就使其他的函数里面有值了。析构函数与构造函数的作用相反,用于撤销对象的一些特殊任务处理,可以是释放对象分配的内存空间。827、类中运算符重载一般采用两种形式:成员函数和友元函数。28、面向对象程序设计的3大机制为:封装性、继承性和 多态性。2、类的访问权限有private、protected 和public三种。32、在类定义
14、中,将 =0 置于虚函数的函数原型的末尾可以声明该函数为纯虚函数。33、类的静态成员分为静态数据成员和静态成员函数。四、读程序题,写出程序运行输出的结果。1. #include using namespace std;class Student private :char Name8;float Math;float Chinese;public :float average;void SetName(char *name);void SetMath(float math);void SetChinese(float ch);float GetAverage(void);class Stude
15、nt1 char ID12;public :float total; /“标记1”void SetTotal(float sum) ; /“标记2”;void main() Student S1,S2;Student1 S3;coutusing namespace std;class Afloat x,y;public:A(float a, float b)x=a;y=b;coutusing namespace std;void main(void)10#include2、 输出结果:初始化全局对象进入 main 函数进入 f()函数初始化自动局部对象初始化静态局部对象调用析构函数进入 f()函数初始化自动局部对象调用析构函数调用析构函数调用析构函数