1、面向对象程序设计一、 选择填空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
2、语言的结构类型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)float8 对于 int *pa5;的描述, (D)是正确的。(A)pa 是一个指向数组的指针,所指向的数组是 5 个 int 型元素(B)pa 是一个指向某数组中第 5 个元素
3、的指针,该元素是 int 变量(C)pa5 表示某个数组的第 5 个元素(D)pa 是一个具有 5 个元素的指针数组,每个元素是一个 int 型指针。9 下列关于指针的运算中, (D )是非法的。(A) 两个指针在一定条件下,可以进行相等或不等的运算。(B) 可以有一个空指针赋值给某个指针。(C) 一个指针可以加上一个整数。(D) 两个指针在一定条件下,可以相加。10 指针可以用来表示数组元素,下列表示中(A )是错误的。已知:int a37;(A)*(a+1)5 (B) *(*a+3) (C )*(*(a+1) (D)*((A)int (B )int (C)int (D )float 12
4、下列各运算符中, (A)可以作用于浮点数。(A)+ ( B)% (C) (D ) ”中,ptr 应该是(C ) 。(A)指向字符常量的指针 (B)指向字符的常量指针(C)指向字符串常量的指针 (D)指向字符串的常量指针21 在下列关键字中,用以说明类中公有成员的是(A ) 。(A)public (B)private (C )protected (D )friend22 下列的种类函数中, (C)不是类的成员函数。(A)构造函数 (B)析构函数 (C)友元函数 (D)拷贝构造函数 23 作用域运算符的功能是(D ) 。(A)标识作用域的级别 (B)指出作用域的范围(C)给定作用域的大小 (D)标
5、识某个成员是属于哪个类 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 关于成员
6、函数特征的下述描述中, (A )是错误的 (A)成员函数一定是内联函数 (B)成员函数可以重载(C)成员函数可以设置缺省参数 (D)成员函数可以是静态的29 下述静态数据成员的特征中, (D )是错误的。(A)说明静态数据成员时前边要加修饰符 static(B)静态数据成员要在类外进行初始化(C)引用静态数据成员时,要在静态数据成员名前加和作用域运算符(D)静态数据成员不是所有对象共有的30 友元的作用是(A)(A)提高程序的运行效率 (B)加强类的封装性(C)实现数据的隐藏 (D)增加成员函数的种类 31 已知类 A 中一个成员函数说明如下: void Set(A 其中 A 33 下列定义中
7、, (B)是定义指向数组的指针 p。(A)int *p5; (B)int (*p)5; (C)(int *)p5; (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
8、关于 new 运算符的下列描述中, (D )是错误的。(A)它可以用来动态创建对象和对象数组(B)使用它创建的对象或对象数组应使用运算符 delete 删除(C)使用它创建对象时要调用构造函数(D)使用它创建对象数组时必须指定初始值 *指针变量名 = new 元素个数;指针变量名下标 = 构造函数(参数表) ;36 关于 delete 运算符的下列描述中, (C)是错误的。(A)它必须用于 new 返回的指针 (B )它也适用于空指针(C)对同一个动态对象可以多次使用该运算符(D)指针名前只用一对方括号符,不管所删除数组的维数37 具有转换功能的构造函数,应该是(B) 。(A)不带参数的构造函
9、数 (B)带有一个参数的构造函数(C)带有两个以参数的构造函数 (D)缺省构造函数38 下列对派生类的描述中, (D )是错误的。(A)一个派生类可以作另一个派生类的基类(B)派生类至少有一个基类(C)派生类的成员除了它自己的成员外,还包含了其基类的成员(D)派生类中从基类继承的成员,其访问权限保持不变39 派生类对象对基类有成员中(A )是可以访问的。(A)公有继承的公有成员 (B)公有继承的私有成员(C)公有继承的保护成员 (D)私有继承的公有成员 40 对基类和派生类的描述中, (B)是错误的。(A)派生类是基类的具体化 (B)派生类是基类的子集(C)派生类是基类定义的延续 (D)派生类
10、是基类的组合 41 派生类构造函数的成员初始化列表中不能包含(C) 。(A)基类的构造函数 (B)派生类中成员对象的初始化(C)基类成员对象的初始化 (D)派生类中一般数据成员的初始化42 关于多继承二义性的描述中, (C)是错误的。(A)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员进行访问可能出现二义性。(B)解决二义性的最常用的方法是用“类名:”指定成员名所属类。(C)基类和派生类中出现的同名成员函数,也存在二义性问题。(D)一个派生类是从两个基类派生而来,而这两个基类又有一个共同的基类,对该基类的成员进行访问时,也可能出现二义性。 43 设置虚基类的目的是(B) 。(A)
11、简化程序 (B)消除二义性 (C)提高运行效率 (D)减少目标代码 44 在派生类对基类继承的传递性中, (C)是错误的。(A)在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。(B)在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。(C)在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。(D)不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域内都是不可见的。45 对定义重载函数的下列要求中, (D )是错误的。(A)要求参数的个数不同 (B)要求参数中至少有
12、一个类型不同(C)要求参数个数相同,参数类型不同 (D)要求函数的返回值不同46 下列函数中, (C)不能重载。(A)成员函数 (B)非成员函数 (C)析构函数 (D)构造函数47 下列对重载函数的描述中, (A )是错误的。(A)重载函数中不允许使用缺省参数 (B)重载函数中编译系统根据参数表进行选择(C)不要使用重载函数来描述毫不相干的函数(D)构造函数重载将给初始化带来多种方式48 下列运算符中, (C)不能重载。(A) 输出指针 pa 的地址值(十进制)的方法是( D) 。(A)cout 。 (T)35 所谓私有成员是指只有类中所提供的成员函数才能直接访问它们,任何类以外的函数对它们的
13、访问都是非法的。 (F)36 某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。 (T)37 可以在类的构造函数中对静态数据成员进行初始化。 (F)38 如果一个成员函数只需要存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。 (T)39 指向对象的指针与对象都可以作函数参数,但是使用前者比后者好些。 (T)40 对象引用作函数参数比用对象指针更方便。 (T)41 对象数组的元素可以是不同类的对象。 (F)42 对象数组既可以在定义它的同时赋初值,又可以在以后赋值。 (T)43 指向对象数组的指针不一定必须指向数组的首元素。 (T)44 “const char *p;”语
14、句说明了 p 是指向字符串的常量指针。 (F)45 一个类的构造函数中可以不包含对其成员对象的初始化。 (F)46 C+语言中,既允许单继承,又允许多继承。 (T)47 派生类是从基类派生出来的,它不能再生成新的派生类。 (F)48 派生类的继承方式有两种:公有继承和私有继承。 (F)49 在公有继承中,基类中的公有成员和私有成员在派生类作用域内都是可见的。 (F)50 在公有继承中,派生类对象可以访问基类的公有成员。 (T)51 在私有成员中,派生类对象可以访问基类的公有成员。 (F)52 在私有继承中,基类中所有成员对派生类的对象都是不可见的。 (T)53 公有派生类的对象是可以访问基类的
15、公有成员的。 (T)54 公有派生类的对象是可以访问基类的私有成员的。 (F)55 公有派生类的对象是可以访问基类的保护成员的。 (F)56 私有派生类的对象是可以访问基类的公有成员的。 (F)57 派生类是它基类的组合。 (F)58 构造函数可以被继承。 (F)59 析构函数不能被继承。 (T)60 只要是类 M 继承了类 N,就可以说类 M 是类 N 的子类型。 (F)61 如果 A 类型是 B 类型的子类型,则 A 类型必然适应于 B 类型。 (T)62 多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序。 (T)63 单继承情况,派生类中对基类成员的访问也会
16、出现二义性。 (F)64 虚基类是用来解决多继承中公共基类在派生类中只产生一个基类成员对象的问题。 (T)65 函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。 (T)66 重载函数可以带有缺省值参数,但是要注意二义性。 (T)67 多数运算符可以重载,个别运算符不能重载,运算符重载是通过函数定义实现的。(T)68 对每个可重载的运算符来讲,它既可以重载为友元函数,又可以重载为成员函数。 (F)69 对单目运算符重载为友元函数,应说明一个形参。重载为成员函数时,不能显式说明形参。 (T)70 重载运算符保持原运算符的优先级和结合性不变。 (T)71 虚函数是用 virtual 关键
17、字说明的成员函数。 (T)72 构造函数说明为纯虚函数是没有意义的。 (T)73 抽象类是指没有定义函数体的基类虚函数。 (F)74 动态联编是在运行时选定调用的成员函数。 (T)75 使用输出运算符可以输出各种类型的变量的值,也可以输出指针值。 (T)76 预定义的插入符从键盘上接收数据是不带缓冲区的。 (F)77 预定义的提取符和插入符是可以重载的。 (T)78 get( )函数不能从流中读取终止字符,终止字符仍留在流中。getline( )函数从流中读取终止字符,但终止字符被丢弃。 (T)79 使用打开文件函数 open( )之前,需要定义一个流类对象,使用 open( )函数来操作该对象。 (F)80 使用关闭文件函数 close( )关闭一个文件时,但流对象仍存在。 (T)81 以 app 方式打开文件时,当前的读指针和写指针都定位于文件尾。 (T)82 打开 ASCII 码流文件和二进制文件时,打开方式是相同的。 (F)83 read( )和 write( )函数可以读写文本文件,也可以读写二进制文件。 (T)84 seekg( )函数和 seekp( )函数分别用来定位 gptr 指针和 pptr 指针的。 (T)三、