1、面向对象程序设计习题及答案docx面向对象程序设计一、 选择填空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)类是创建
2、对象的样板 (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) 87.类型修饰符UnSigned修饰(D)类型是错误的。( A ) char ( B) int ( C) long int ( D) float& 对于int *pa5;的描述,(D)是正确的。(A)pa 是一个指向数组的指针,所指向的数组是 5 个 int 型元素
3、(B)pa 是一个指向某数组中第 5 个元素的指针,该元素是 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) *(&a00+2)11.下
4、列表示引用的方法中,(A)是正确的。已知: m=10;(A)int &x=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 )形参
5、是指针,实参是地址值 ( B )形参和实参都是变量(C)形参是数组名,实参是数组名 (D)形参是引用,实参是变量16. 在C+ +中,下列关于设置参数默认值的描述中, (B)是正确的。(A)不允许设置参数的默认值(B)设置参数默认值时,应按从右到左的顺序进行(C)设置参数默认值时,应按从左到右的顺序进行( D )设置参数默认值时,应该全部参数都设置17. 重载函数在调用时选择的依据中, (D)是错误的。(A)参数个数 (B)参数类型 (C)函数名字 (D)函数的返回值类型18.在一个函数中,要求通过函数调用来实现一个不太复杂的功能,并且要求加快执行速 度,选用(A)最合适。(A)内联函数 (B
6、)重载函数 (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) friend22. 下列的种类函数中,(C)不是类的成员函数。(A)构造函数 (B)析构函数 (C)友元函数 (D)
7、拷贝构造函数23.作用域运算符的功能是( D)。(A)标识作用域的级别 (B)指出作用域的范围(C)给定作用域的大小 (D)标识某个成员是属于哪个类24.( B)是不可以作为该类的成员的。(A)自身类对象的指针 (B)自身类的对象(C)自身类对象的引用 (D)另一个类的对象25.( D)不是构造函数的特点。(A)构造函数的函数名与类名相同(C)构造函数可以设置缺省参数26.(A)是析构函数的特征。(A) 个类中只能定义一个析构函数(C)析构函数的定义只能在类体内27. 通常拷贝构造函数的参数是( C)。(A)某个对象名(C)某个对象的引用名28.关于成员函数特征的下述描述中,(A)成员函数一定
8、是内联函数(C)成员函数可以设置缺省参数29.下述静态数据成员的特征中,(B)构造函数可以重载( D )构造必须指定类型说明(B)析构函数名与类名不同(D)析构函数可以有一个或多个参数(B)某个对象的成员名(D)某个对象的指针名A )是错误的(B)成员函数可以重载(D)成员函数可以是静态的D )是错误的。static(A)说明静态数据成员时前边要加修饰符(B)静态数据成员要在类外进行初始化(C) 引用静态数据成员时,要在静态数据成员名前加 类名 和作用域运算符(D)静态数据成员不是所有对象共有的30 友元的作用是( A)(A)提高程序的运行效率 (B)加强类的封装性(C)实现数据的隐藏 (D)
9、增加成员函数的种类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)对象数组的下标是从 O开始的 (B)对象数组的数组名是一个常量指针(C)对象数组的每个元素是同一个类的对象( D )对象数组只能赋初值,而不能被赋值 赋值格式:对象数组名 行下标 列下标 = 构造函数名 (实参表) ; 33.下列定义中,(
10、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 指针是一个常量指针, 但也可以将它定义成指向常量的常量指针, 其方法是在定义 成员函数时,或者在类中声明成员函数时,在函数头后面加上关键字 Co
11、nst 35.关于new运算符的下列描述中,(D)是错误的。(A)它可以用来动态创建对象和对象数组(B) 使用它创建的对象或对象数组应使用运算符 delete删除(C)使用它创建对象时要调用构造函数(D)使用它创建对象数组时必须指定初始值 V类型 *指针变量名 =new V类型元素个数; 指针变量名 下标 = 构造函数 (参数表);36.关于delete运算符的下列描述中,(C)是错误的。(A)它必须用于 new返回的指针 (B)它也适用于空指针(C)对同一个动态对象可以多次使用该运算符(D)指针名前只用一对方括号符,不管所删除数组的维数37.具有转换功能的构造函数,应该是( B)。(A)不带
12、参数的构造函数 (B)带有一个参数的构造函数(C)带有两个以参数的构造函数 (D)缺省构造函数38.下列对派生类的描述中, (D)是错误的。(A)一个派生类可以作另一个派生类的基类(B)派生类至少有一个基类(C)派生类的成员除了它自己的成员外,还包含了其基类的成员( D )派生类中从基类继承的成员,其访问权限保持不变39.派生类对象对基类有成员中( A)是可以访问的。(A)公有继承的公有成员 (B)公有继承的私有成员4041424344454647484950(C)公有继承的保护成员 (D)私有继承的公有成员对基类和派生类的描述中, (B)是错误的。(A)派生类是基类的具体化 (B)派生类是基
13、类的子集(C)派生类是基类定义的延续 (D)派生类是基类的组合(A)基类的构造函数(B)派生类中成员对象的初始化派生类构造函数的成员初始化列表中不能包含( C)。(C)基类成员对象的初始化 (D)派生类中一般数据成员的初始化关于多继承二义性的描述中, (C)是错误的。(A) 一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员进行访问可 能出现二义性。(B) 解决二义性的最常用的方法是用“类名 ::”指定成员名所属类。(C) 基类和派生类中出现的同名成员函数,也存在二义性问题。(D) 一个派生类是从两个基类派生而来,而这两个基类又有一个共同的基类,对该基 类的成员进行访问时,也可能出现
14、二义性。设置虚基类的目的是( B)。(A)简化程序 (B)消除二义性 (C)提高运行效率 (D)减少目标代码在派生类对基类继承的传递性中, (C)是错误的。(A) 在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。(B) 在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。(C) 在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员。(D) 不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域内都是不可见的。对定义重载函数的下列要求中, (D)是错误的。(A)要求参数
15、的个数不同 (B)要求参数中至少有一个类型不同(C)要求参数个数相同,参数类型不同 (D)要求函数的返回值不同下列函数中,(C)不能重载。(A)成员函数 (B)非成员函数 (C)析构函数 (D)构造函数下列对重载函数的描述中, (A)是错误的。(A) 重载函数中不允许使用缺省参数(B) 重载函数中编译系统根据参数表进行选择(C) 不要使用重载函数来描述毫不相干的函数(D) 构造函数重载将给初始化带来多种方式 下列运算符中,(C)不能重载。A) & (B) (C) : (D) new下列关于运算符重载的描述中, (D)是正确的。(A) 运算符重载可以改变运算量的个数(B) 运算符重载可以改变优先
16、级(C) 运算符重载可以改变结合性D )运算符重载不可以改变语法结构 运算符可以重载为(A)或(B )。(A)成员函数 (B)友元函数 (C)内联函数 (D)带缺省参数的函数51 关于动态联编的下列描述中, (D )是错误的。(A)动态联编是以虚函数为基础的(B)动态联编是在程序运行时确定所调用的函数代码块(C)动态联编调用多态函数时传递给它的是基类对象的指针或基类对象的引用(D)动态联编是在编译时确定调用某个函数的52.关于虚函数的描述中,(C)是正确的。(A)虚函数是一个 StatiC类型的成员函数(B)虚函数是一个非成员函数(C)基类中说明了虚函数后,其派生类中的对应函数可不必重新再说明
17、(D)基类中的虚函数和其派生类中的虚函数具有不同的参数个数和类型53.用虚函数只有在(B)和(D)时才能实现多态性。(A)基类和派生类具有同名虚函数,而它们的参数个数不同(B)用基类的指针或基类的引用来访问虚函数(C)基类和派生类具有同名虚函数,而它们的参数至少有一个类型不同(D)基类和派生类具有函数原型完全相同的同名虚函数,而函数体内的执行代码不同54.关于纯虚函数和抽象类的描述中, (C)是错误的。(A)纯虚函数是一种特殊的虚函数,它没有具体的实现部分(B)抽象类是指具有纯虚函数的类(C)一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类(D)抽象类只能作为基类使用,其纯虚函数的实现
18、部分由派生类给出55.下列描述中,(D)是抽象类的特性。(A)可以说明虚函数 (B)可以进行构造函数重载(C)可以定义友元函数 (D)不能说明其对象56.进行文件操作时需要包含(B)文件。( A) ioStream.h (B) fStream.h (C) Stdio.h ( D) Stdlib.h57.已知:int a,*pa=&a;输出指针Pa的地址值(十进制)的方法是( D)。( A) Coutpa; ( B) Cout*pa; ( C) Cout&pa; ( D) Coutlong(pa);58.下列输出字符?A?的方法中,(A)是错误的。( A) Coutput( ,A?); (B)
19、Cout ?A?; (C) Cout.put( , A?); (D) Char A= ?A?; Cout 。 ( T)访问对象的成员与访问结构变量的成员相同,使用运算符所谓私有成员是指只有类中所提供的成员函数才能直接访问它们,任何类以外的函数3637383940414243444546474849505152535455565758596061626364656667686970717273对它们的访问都是非法的。 ( F)某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。 ( T)可以在类的构造函数中对静态数据成员进行初始化。 (F)如果一个成员函数只需要存取一个类的静态数据成员,
20、则可将该成员函数说明为静态 成员函数。 (T )指向对象的指针与对象都可以作函数参数,但是使用前者比后者好些。 ( T)对象引用作函数参数比用对象指针更方便。 (T )对象数组的元素可以是不同类的对象。 ( F)对象数组既可以在定义它的同时赋初值,又可以在以后赋值。 ( T)指向对象数组的指针不一定必须指向数组的首元素。 (T )“ const char *p; ”语句说明了 p 是指向字符串的常量指针。 (F)一个类的构造函数中可以不包含对其成员对象的初始化。 ( F)C+语言中,既允许单继承,又允许多继承。 (T)派生类是从基类派生出来的,它不能再生成新的派生类。 ( F)派生类的继承方式
21、有两种:公有继承和私有继承。 ( F)F)在公有继承中,基类中的公有成员和私有成员在派生类作用域内都是可见的。 在公有继承中,派生类对象可以访问基类的公有成员。 ( T)在私有成员中,派生类对象可以访问基类的公有成员。 ( F)在私有继承中,基类中所有成员对派生类的对象都是不可见的。 (T)公有派生类的对象是可以访问基类的公有成员的。 ( T)公有派生类的对象是可以访问基类的私有成员的。 ( F)公有派生类的对象是可以访问基类的保护成员的。 ( F)私有派生类的对象是可以访问基类的公有成员的。 ( F)派生类是它基类的组合。 ( F)构造函数可以被继承。 ( F)析构函数不能被继承。 (T)只
22、要是类 M 继承了类 N ,就可以说类 M 是类 N 的子类型。 ( F)如果A类型是B类型的子类型,则 A类型必然适应于 B类型。 (T) 多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的 顺序。 ( T)单继承情况,派生类中对基类成员的访问也会出现二义性。 ( F)虚基类是用来解决多继承中公共基类在派生类中只产生一个基类成员对象的问题。(T) 函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。 ( T)重载函数可以带有缺省值参数,但是要注意二义性。 (T)T)多数运算符可以重载, 个别运算符不能重载, 运算符重载是通过函数定义实现的。 对每个可重载的运算
23、符来讲,它既可以重载为友元函数,又可以重载为成员函数。( F ) 对单目运算符重载为友元函数,应说明一个形参。重载为成员函数时,不能显式说明 形参。 ( T)重载运算符保持原运算符的优先级和结合性不变。 ( T)虚函数是用 virtual 关键字说明的成员函数。 ( T)构造函数说明为纯虚函数是没有意义的。 ( T)抽象类是指没有定义函数体的基类虚函数。 (F)动态联编是在运行时选定调用的成员函数。 (T )使用输出运算符 可以输出各种类型的变量的值,也可以输出指针值。 (T) 预定义的插入符从键盘上接收数据是不带缓冲区的。 (F)预定义的提取符和插入符是可以重载的。 ( T)get( ) 函
24、数不能从流中读取终止字符,终止字符仍留在流中。 getline( ) 函数从流中读取终止字符,但终止字符被丢弃。 ( T)使用打开文件函数 open( )之前,需要定义一个流类对象, 使用 open( )函数来操作该对 象。 (F)使用关闭文件函数 close( )关闭一个文件时,但流对象仍存在。 ( T )以 app 方式打开文件时,当前的读指针和写指针都定位于文件尾。 ( T)打开 ASCII 码流文件和二进制文件时,打开方式是相同的。 ( F)read( )和 write( ) 函数可以读写文本文件,也可以读写二进制文件。 ( T)7475767778798081828384seekg( )函数和 seekp( )函数分别用来定位 gptr 指针和 pptr 指针的。 ( T)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1