面向对象程序设计
一、选择填空
1.关于C++与C语言的关系描述中,〔D〕是错误的。
〔A〕C语言是C++的一个子集〔B〕C语言与C++是兼容的
〔C〕C++对C语言进展了一些改良〔D〕C++和C语言都是面向对象的
2.下面关于对象概念的描述中,〔B〕是错误的。
〔A〕对象就是C语言的构造变量〔B〕对象代表着正在创立的系统中的一个实体〔C〕对象是一个状态的操作〔或方法〕的封装体
〔D〕对象之间的信息传递是通过消息进展的
3.下面关于类概念的描述中,〔D〕是错误的。
〔A〕类是抽象数据类型的实现〔B〕类是具有共同行为的假设干对象的统一描述体〔C〕类是创立对象的样板〔D〕类就是C语言的构造类型
4.按照标识符的要求,〔A〕符号不能组成标识符。
〔A〕连接符〔B〕下划线〔C〕大小写字母〔D〕数字字符
5.以下符号中,〔C〕不可作为分隔符。
〔A〕,  〔B〕:〔C〕?〔D〕;
6.在16位机中,int型字宽为〔A〕字节。
〔A〕2 〔B〕4 〔C〕6 〔D〕8
7.类型修饰符unsigned修饰〔D〕类型是错误的。
〔A〕char 〔B〕int  〔C〕long int 〔D〕float
8.对于int *pa[5];的描述,〔D〕是正确的。
〔A〕pa是一个指向数组的指针,所指向的数组是5个int型元素
〔B〕pa是一个指向*数组中第5个元素的指针,该元素是int变量
〔C〕pa[5]表示*个数组的第5个元素
〔D〕pa是一个具有5个元素的指针数组,每个元素是一个int型指针。
9.以下关于指针的运算中,〔D〕是非法的。
(A)两个指针在一定条件下,可以进展相等或不等的运算。
(B)可以有一个空指针赋值给*个指针。
(C)一个指针可以加上一个整数。
(D)两个指针在一定条件下,可以相加。
10.指针可以用来表示数组元素,以下表示中〔A〕是错误的。:
int a[3][7];
〔A〕*(a+1)[5]  〔B〕*(*a+3) 〔C〕*(*(a+1)) 〔D〕*(&a[0][0]+2)
11.以下表示引用的方法中,〔A〕是正确的。: m=10;
〔A〕int &*=m; 〔B〕int &y=10; 〔C〕int & z; 〔D〕float &t=&m; 12.以下各运算符中,〔A〕可以作用于浮点数。
〔A〕++ 〔B〕% 〔C〕>> 〔D〕&
〔与C语言不同,在C++中++和--运算符可以作用于浮点数〕
13.当一个函数无返回值时,定义它其函数类型应是〔A〕。
〔A〕void 〔B〕任意〔C〕int 〔D〕无
14.在函数说明时,以下〔D〕项是不必要的。
〔A〕函数的类型〔B〕函数的参数类型和名字
〔C〕函数名字〔D〕返回值表达式
15.以下的〔D〕是引用调用。
〔A〕形参是指针,实参是地址值〔B〕形参和实参都是变量
〔C〕形参是数组名,实参是数组名〔D〕形参是引用,实参是变量
16.在C++中,以下关于设置参数默认值的描述中,〔B〕是正确的。
〔A〕不允许设置参数的默认值
〔B〕设置参数默认值时,应按从右到左的顺序进展
〔C〕设置参数默认值时,应按从左到右的顺序进展
〔D〕设置参数默认值时,应该全部参数都设置
17.重载函数在调用时选择的依据中,〔D〕是错误的。
〔A〕参数个数〔B〕参数类型〔C〕函数名字〔D〕函数的返回值类型
18.在一个函数中,要求通过函数调用来实现一个不太复杂的功能,并且要求加快执行速度,选用〔A〕最适宜。
〔A〕联函数〔B〕重载函数〔C〕递归函数〔D〕嵌套调用
19.采用函数重载的目的在于〔D〕
〔A〕实现共享〔B〕减少空间〔C〕提高速度〔D〕使用方便,提高可读性20.说明语句 "const char *ptr; 〞中,ptr应该是〔C〕。
〔A〕指向字符常量的指针〔B〕指向字符的常量指针
〔C〕指向字符串常量的指针〔D〕指向字符串的常量指针
21.在以下关键字中,用以说明类中公有成员的是〔A〕。
〔A〕public 〔B〕private 〔C〕protected 〔D〕friend
22.以下的种类函数中,〔C〕不是类的成员函数。
〔A〕构造函数〔B〕析构函数〔C〕友元函数〔D〕拷贝构造函数
23.作用域运算符的功能是〔D〕。
〔A〕标识作用域的级别〔B〕指出作用域的围
〔C〕给定作用域的大小〔D〕标识*个成员是属于哪个类
24.〔B〕是不可以作为该类的成员的。
〔A〕自身类对象的指针〔B〕自身类的对象
〔C〕自身类对象的引用〔D〕另一个类的对象
25.〔D〕不是构造函数的特点。
〔A〕构造函数的函数名与类名一样〔B〕构造函数可以重载
〔C〕构造函数可以设置缺省参数〔D〕构造必须指定类型说明
26.〔A〕是析构函数的特征。
〔A〕一个类中只能定义一个析构函数〔B〕析构函数名与类名不同
〔C〕析构函数的定义只能在类体〔D〕析构函数可以有一个或多个参数
27.通常拷贝构造函数的参数是〔C〕。
〔A〕*个对象名〔B〕*个对象的成员名
〔C〕*个对象的引用名〔D〕*个对象的指针名
28.关于成员函数特征的下述描述中,〔A〕是错误的
〔A〕成员函数一定是联函数〔B〕成员函数可以重载
〔C〕成员函数可以设置缺省参数〔D〕成员函数可以是静态的
29.下述静态数据成员的特征中,〔D〕是错误的。
〔A〕说明静态数据成员时前边要加修饰符static
〔B〕静态数据成员要在类外进展初始化
〔C〕引用静态数据成员时,要在静态数据成员名前加<;类名>和作用域运算符
〔D〕静态数据成员不是所有对象共有的
30.友元的作用是〔A〕
〔A〕提高程序的运行效率〔B〕加强类的封装性
〔C〕实现数据的隐藏〔D〕增加成员函数的种类
31.类A中一个成员函数说明如下:void Set(A &a); 其中A &a的含义是〔C〕。
〔A〕指向类A的指针a 〔B〕将a的地址赋给变量Set
〔C〕a是类A对象的引用,用来作函数Set( )的形参
〔D〕变量A与a按位逻辑与,作为函数Set( )的参数
32.以下关于对象数组的描述中,〔D〕是错误的。
〔A〕对象数组的下标是从0开场的〔B〕对象数组的数组名是一个常量指针
〔C〕对象数组的每个元素是同一个类的对象
〔D〕对象数组只能赋初值,而不能被赋值
{ 赋值格式:对象数组名[行下标][列下标] = 构造函数名(实参表) ;  }
33.以下定义中,〔B〕是定义指向数组的指针p。
〔A〕int *p[5]; 〔B〕int  (*p)[5]; 〔C〕(int *)p[5]; 〔D〕int *p[ ]; 34.:print()函数是一个类的常(const)成员函数,它无返回值,以下表示中,〔A〕是正确的。
〔A〕void print( ) const; 〔B〕const void print( );
〔C〕void const print( ); 〔D〕void print (const);
{ this指针是一个常量指针,但也可以将它定义成指向常量的常量指针,其方法是在定义成员函数时,或者在类中声明成员函数时,在函数头后面加上关键字const }
35.关于new运算符的以下描述中,〔D〕是错误的。
〔A〕它可以用来动态创立对象和对象数组
〔B〕使用它创立的对象或对象数组应使用运算符delete删除
〔C〕使用它创立对象时要调用构造函数
〔D〕使用它创立对象数组时必须指定初始值
{ <;类型> *指针变量名 = new <;类型>[元素个数];
指针变量名[下标] = 构造函数(参数表);
}
36.关于delete运算符的以下描述中,〔C〕是错误的。
〔A〕它必须用于new返回的指针〔B〕它也适用于空指针
〔C〕对同一个动态对象可以屡次使用该运算符
〔D〕指针名前只用一对方括号符,不管所删除数组的维数
37.具有转换功能的构造函数,应该是〔B〕。
〔A〕不带参数的构造函数〔B〕带有一个参数的构造函数
〔C〕带有两个以参数的构造函数〔D〕缺省构造函数
构造函数可以被重载38.以下对派生类的描述中,〔D〕是错误的。
〔A〕一个派生类可以作另一个派生类的基类
〔B〕派生类至少有一个基类
〔C〕派生类的成员除了它自己的成员外,还包含了其基类的成员
〔D〕派生类中从基类继承的成员,其访问权限保持不变
39.派生类对象对基类有成员中〔A〕是可以访问的。
〔A〕公有继承的公有成员〔B〕公有继承的私有成员
〔C〕公有继承的保护成员〔D〕私有继承的公有成员
40.对基类和派生类的描述中,〔B〕是错误的。
〔A〕派生类是基类的具体化〔B〕派生类是基类的子集
〔C〕派生类是基类定义的延续〔D〕派生类是基类的组合
41.派生类构造函数的成员初始化列表中不能包含〔C〕。
〔A〕基类的构造函数〔B〕派生类中成员对象的初始化
〔C〕基类成员对象的初始化〔D〕派生类中一般数据成员的初始化
42.关于多继承二义性的描述中,〔C〕是错误的。
〔A〕一个派生类的两个基类中都有*个同名成员,在派生类中对这个成员进展访问可能出现二义性。
〔B〕解决二义性的最常用的方法是用"类名::〞指定成员名所属类。
〔C〕基类和派生类中出现的同名成员函数,也存在二义性问题。
〔D〕一个派生类是从两个基类派生而来,而这两个基类又有一个共同的基类,对该基类的成员进展访问时,也可能出现二义性。
43.设置虚基类的目的是〔B〕。
〔A〕简化程序〔B〕消除二义性〔C〕提高运行效率〔D〕减少目标代码
44.在派生类对基类继承的传递性中,〔C〕是错误的。
〔A〕在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。
〔B〕在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。
〔C〕在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。
〔D〕不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域都是不可见的。45.对定义重载函数的以下要求中,〔D〕是错误的。
〔A〕要求参数的个数不同〔B〕要求参数中至少有一个类型不同
〔C〕要求参数个数一样,参数类型不同〔D〕要求函数的返回值不同
46.以下函数中,〔C〕不能重载。
〔A〕成员函数〔B〕非成员函数〔C〕析构函数〔D〕构造函数
47.以下对重载函数的描述中,〔A〕是错误的。
〔A〕重载函数中不允许使用缺省参数
〔B〕重载函数中编译系统根据参数表进展选择
〔C〕不要使用重载函数来描述毫不相干的函数
〔D〕构造函数重载将给初始化带来多种方式
48.以下运算符中,〔C〕不能重载。
〔A〕&&    〔B〕[ ]    〔C〕::〔D〕new
49.以下关于运算符重载的描述中,〔D〕是正确的。
〔A〕运算符重载可以改变运算量的个数
〔B〕运算符重载可以改变优先级
〔C〕运算符重载可以改变结合性
〔D〕运算符重载不可以改变语法构造
50.运算符可以重载为〔A〕或〔B〕。
〔A〕成员函数〔B〕友元函数〔C〕联函数〔D〕带缺省参数的函数
51.关于动态联编的以下描述中,〔D〕是错误的。
〔A〕动态联编是以虚函数为根底的
〔B〕动态联编是在程序运行时确定所调用的函数代码块
〔C〕动态联编调用多态函数时传递给它的是基类对象的指针或基类对象的引用
〔D〕动态联编是在编译时确定调用*个函数的
52.关于虚函数的描述中,〔C〕是正确的。
〔A〕虚函数是一个static类型的成员函数
〔B〕虚函数是一个非成员函数
〔C〕基类中说明了虚函数后,其派生类中的对应函数可不必重新再说明
〔D〕基类中的虚函数和其派生类中的虚函数具有不同的参数个数和类型
53.用虚函数只有在〔B〕和〔D〕时才能实现多态性。
〔A〕基类和派生类具有同名虚函数,而它们的参数个数不同
〔B〕用基类的指针或基类的引用来访问虚函数
〔C〕基类和派生类具有同名虚函数,而它们的参数至少有一个类型不同
〔D〕基类和派生类具有函数原型完全一样的同名虚函数,而函数体的执行代码不同54.关于纯虚函数和抽象类的描述中,〔C〕是错误的。
〔A〕纯虚函数是一种特殊的虚函数,它没有具体的实现局部
〔B〕抽象类是指具有纯虚函数的类
〔C〕一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
〔D〕抽象类只能作为基类使用,其纯虚函数的实现局部由派生类给出
55.以下描述中,〔D〕是抽象类的特性。
〔A〕可以说明虚函数〔B〕可以进展构造函数重载
〔C〕可以定义友元函数〔D〕不能说明其对象
56.进展文件操作时需要包含〔B〕文件。
〔A〕iostream.h  〔B〕fstream.h  〔C〕stdio.h  〔D〕stdlib.h
57.:int a,*pa=&a; 输出指针pa的地址值〔十进制〕的方法是〔D〕。
〔A〕cout<<pa;  〔B〕cout<<*pa;  〔C〕cout<<&pa;  〔D〕cout<<long(pa);
58.以下输出字符’A’的方法中,〔A〕是错误的。
〔A〕cout<<put(‘A’); 〔B〕cout<<’A’; 〔C〕cout.put(‘A’); 〔D〕char A=’A’; cout<<A;
59.关于getline()函数的以下描述中,〔D〕是错误的。
〔A〕该函数是用来从键盘上读取字符串的
〔B〕该函数读取的字符串长度是受限制的
〔C〕该函数读取字符串时遇到终止符就停顿
〔D〕该函数中所使用的终止符只能是换行符
60.关于read( )函数的以下描述中,〔D〕是对的。
〔A〕该函数只能从键盘中读取字符串
〔B〕该函数读取的字符串长度是不受限制的
〔C〕该函数只能用于文本文件的操作
〔D〕该函数只能按规定读取所指定的字符数
61.ios类提供控制格式标志位中,〔A〕是指定转换十六进制形式的标志位。
〔A〕he*        〔B〕oct        〔C〕dec        〔D〕left
62.磁盘文件操作中,翻开磁盘文件的访问方式中,〔C〕是以追加方式翻开文件。
〔A〕in        〔B〕out        〔C〕app        〔D〕ate
63.以下函数中,〔D〕是对文件进展写操作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。