《2022年《VC程序设计》期末复习题及答案 .pdf》由会员分享,可在线阅读,更多相关《2022年《VC程序设计》期末复习题及答案 .pdf(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学而不思则惘,思而不学则殆一、选择题A(1)下列的()是引用调用。A形参是引用,实参是变量;B形参和实参都是变量;C形参是指针,实参是地址值;D形参是数组名,实参是数组名。C(2)作用域运算符的功能是() A 给定作用域的大小;表示作用域的级别的;C某个成员是属于哪个类的;指出作用域的范围的。D(3)下列的各函数中, ()不是类的成员函数。A构造函数;析构函数;拷贝初始化构造函数;友元函数。D(4)下面()不是构造函数的特征。A构造函数可以重载;构造函数可以设置缺省参数;构造函数的函数名和类名相同;构造函数必须指定返回值类型。C( 5)下述静态数据成员的特性中,()是错误的。A静态数据成员要在
2、类体外进行初始化;B说明静态数据成员时前边要加修饰符static;C静态数据成员不是所有对象所共有的;D引用静态数据成员时,要在静态数据成员名前加和作用域运算符。C(6)已知类A 有三个公有成员:void f1(int), void f2(int) 和 int a,则()是指向类A 成员函数的指针。 A *p;B. int A:*pc=&A:a; C void(A :*pa) (int);. A *p; C(7)下列关于对象数组的描述中,()是错的。对象数组的数组名是一个地址常量; 对象数组的下标是从开始的; 对象数组只能赋初值,不能被赋值; 对象数组的数组元素是同一个类的对象B(8)下列定义
3、中, ( )是定义指向类A的对象数组的指针。A A *p5; A (*p) 5; (A *) p5; A *p ; A(9)说明语句const char *ptr; 中, ptr 是() 。A指向字符常量的指针;指向字符的常量指针;指向字符串常量的指针;指向字符串的常量指针。B(10)关于 new 运算符的下列描述中,( )是错的 . 使用它创建对象时要调用构造函数;使用它创建对象数组时必须指定初始值;它可以用来动态创建对象和对象数组;使用它创建的对象或对象数组可以使用运算符delete 删除。答:(1)A (2)C (3)D( 4)D( 5)C( 6)C (7)C ( 8)B (9) A (
4、10)B C( 1) 派生类的对象对它的基类成员中()是可以访问的公有继承的保护成员;公有继承的私有成员;公有继承的公有成员;私有继承的公有成员D(2) 下面关于派生类的描述中,( )是错的。一个派生类可以作为另一个派生类的基类;派生类至少有一个基类;派生类的成员除了它自己的成员外,还包含了它的基类的成员名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆派生类中继承的基类成员的访问权限
5、到派生类保持不变。C( 3)派生类的构造函数的成员初始化列表中,不能包含()基类的构造函数调用;派生类对象成员的初始化;基类对象成员的初始化;派生类中一般数据成员的初始化B( 4)设置虚基类的目的是()减少目标代码;消除二义性;提高运行效率;简化程序。A(5) 带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化()一次;二次;多次;与虚基类下面的派生类个数有关答案:(1)(2)D (3) (4)B (5) A A(1) 以下保留字()不能出现在说明虚函数原型的语句中。Astatic B. operator C. void D. const .
6、 D(2) 以下关于虚函数和纯虚函数的说法中,( )是不正确的A在派生类中虚函数可以不用关键字virtual 说明。B. 虚函数在派生类中可以不重定义。C. 不能为虚函数定义缺省操作。D. 纯虚函数在派生类中可以不重定义。C(3) 以下关于动态绑定的说法中,正确的是()A虚基类是动态绑定的。B. 指针是动态绑定的。C. 所有的虚函数和纯虚函数都是动态绑定的。D. 动态绑定与编译系统无关。C(4) 以下关于抽象类的说法中,( )是不正确的A不可创建抽象类的实例。B. 可以声明抽象类的引用。C. 抽象类的派生类也是抽象类。D. 抽象类的派生类也可以是抽象类。(5) B 以下关于抽象类的说法中,只有
7、()是正确的A定义抽象类的目的是软件重用。B. 定义抽象类是为了提高访问效率。C. 定义抽象类是使指针的使用更灵活。D. 抽象类提供了对类进行分类的机制。(6) D 以下关于多态性的说法中,( )是不正确的A每个多态类的对象有一个虚表指针。B. 虚函数调用与this 指针无关。C. 每个多态类的基类都有一个虚函数表。D. 多态类的每一个派生类都有一个虚函数表。单项选择题答案:(1) A (2) D (3) C (4) C (5) B (6) D D(1)下列不是C+流对象的是 ( ) A.cout B.cin C.cerr D.ostream A(2)已知 :int w=-3,x=10,z=7
8、 执行下面的语句的输出结果为( ) cout (10?x+100:x-10 )(w+|z+)(!wz )(w&z )名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆A. 0111 B.1111 C.0101 D.0100 C(3)void main()coutsetfill(*)setw(10)10endl;的输出结果为 ( ) A. $ 10 10 B.*10 C. *10 D.*
9、1010 D(4)C+所有输入和输出流的基类是( ) A.stream.h B.iostream.h C.cin 和 cout D.ios B(5)文件的输入与输出流是( ) A. iostream.h B. ifstream 和 ofstream C. istream_withassign , ostream_withassign D. istream 和 ostream C(6)语句 coutoct12; 的输出结果是转为八进制数0011 1100 14 A.12 B.1100 C.14 D. C B(7)对 进行重载的语句istream & operatora D. x.a B 109.
10、 假定 AA为一个类, a() 为该类公有的函数 成员, x 为该类的一个对象,则访问x 对象中函数成员a() 的格式为()。 A. x.a B. x.a() C. x-a D. x-a() C 110. 假定 AA为一个类, a 为该类公有的数据成员,px 为指向该类对象的一个指针 ,则访问px 所指对象中数据成员 a 的格式为()。 A. px(a) B. pxa C. px-a D. px.a D 111. 假定 AA为一个类, a 为该类 私有 的数据成员, GetValue() 为该类公有函数成员,它返回a 的值, x 为该类的一个对象,则访问x 对象中数据成员a 的格式为()。 A
11、. x.a B. x.a() C. x-GetValue() D. x.GetValue() A 112. 假定 AA为一个类, int a() 为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为 ()。 A. int AA:a() B. int AA:a() C. AA:a() D. AA:int a() A 113. 假定 AA为一个类, a 为该类 公有 的数据成员, 若要在该类的一个成员函数中访问它,则书写格式为 ()。 A. a B. AA:a C. a() D. AA:a() B 114. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字 ()放在函数原型或
12、函数头的前面。 A. in B. inline C. inLine D. InLiner D 115. 在多文件结构的程序中,通常把类的定义单独存放于()中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件 B 116. 在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于()中。 A. 主文件 B.实现文件 C. 库文件 D. 头文件 A 117. 在多文件结构的程序中,通常把含有main() 函数的文件称为()。 A. 主文件 B. 实现文件 C. 程序文件 D. 头文件 C 118. 一个 C+程序文件的扩展名为()。 A. .h B. .c C. .cpp D. .
13、cp A 119. 在 C+ 程序中使用的cin 标识符是系统类库中定义的()类中的一个对象。 A. istream 输入流 B. ostream C. iostream D. fstream B 120. 在 C+ 程序中使用的cout 标识符是系统类库中定义的()类中的一个对象。 A. istream B. ostream C. iostream D. fstream D 121. 假定 AA是一个类, abc 是该类的一个成员函数,则参数表中隐含的第一个参数的类型为()。 A. int B. char C. AA D. AA* C 122. 假定 AA是一个类, abc 是该类的一个成员
14、函数,则参数表中隐含的第一个参数为()。 A. abc B. *this C. this D. this& A 123. 假定 AA是一个类,“ AA& abc();”是该类中一个成员函数的原型,若该函数存在对*this赋值的语句,当用 x.abc()调用该成员函数后,x 的值()。 A. 已经被改变 B. 可能被改变 C. 不变 D.不受函数调用的影响 C 124. 假定 AA是一个类,“AA* abc() const; ” 是该类中一个成员函数的原型,若该函数返回this值,当用 x.abc()调用该成员函数后,x 的值()。 A. 已经被改变 B. 可能被改变 C. 不变 D. 受到函数
15、调用的影响 B 125. 类中 定义的成员默认为()访问属性。 A. public B. private C. protected D. friend A 126. 结构中 定义的成员默认为()访问属性。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆 A. public B. private C. protected D. friend C 127. 当类中一个字符指针成员指向具有
16、n 个字节的存储空间时,它所能存储字符串的最大长度为( )。 A. n B. n+1 C. n-1 D. n-2 C 128. 在一个用数组实现的队列类中,假定数组长度为MS ,队首元素位置为first,队列长度为length ,则队尾(即最后一个)元素的位置 为( )。 A. length+1 B. first+length C. (first+length-1)%MS D. (first+length)%MS D 129. 在一个用数组实现的队列类中,假定数组长度为MS ,队首元素位置为first,队列长度为length ,则队尾的后一个位置 为( )。 A. length+1 B. fi
17、rst+length C. (first+length-1)%MS D. (first+length)%MS B 130. 在一个用数组实现的队列类中,假定数组长度为MS ,队首元素位置为first,队列长度为length ,则队首的后一个位置为( )。 A. first+1 B. (first+1)%MS C. (first-1)%MS D. (first+length)%MS D 131. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem 表示,包含的指针域用next 表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结
18、点的地址赋给( )。 A. elemHead B. elemTail C. elemHead-next和 elemHead D. elemTail-next和 elemTail C 132. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem 表示,包含的指针域用next 表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空, 则进行插入时必须把新结点的地址赋给( )。 A. elemHead B. elemTail C. elemHead和 elemTail D. elemHead或 elemTail A 133. 队列具有()的操作特性。 A.
19、先进先出 B. 先进后出 C. 进出无序 D. 进出任意 B 134. 栈具有()的操作特性。 A. 先进先出 B. 先进后出 C. 进出无序 D. 进出任意 A 135. 对于一个类的构造函数,其函数名与类名( )。 A. 完全相同 B. 基本相同 C. 不相同 D. 无关系 C 136. 对于一个类的析构函数,其函数名与类名( )。 A. 完全相同 B. 完全不同 C. 只相差一个字符 D. 无关系 C 137. 类的构造函数是在定义该类的一个( )时被自动调用执行的。 A. 成员函数 B. 数据成员 C. 对象 D. 友元函数 B 138. 类的析构函数是一个对象被( )时自动调用的。
20、A. 建立 B. 撤消 C. 赋值 D. 引用 A 139. 一个类的 构造函数 通常被定义为该类的( )成员。 A. 公用 B. 保护 C. 私有 D. 友元 C 140. 一个类的析构函数通常被定义为该类的( )成员。 A. 私有 B. 保护 C. 公用 D. 友元 B 141. 假定 AB为一个类,则执行“AB x; ”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数 A 142. 假定 AB为一个类,则执行“AB x(a,5);”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D.
21、 赋值重载函数 D 143. 假定 AB为一个类,则执行“AB *s =new AB(a,5);”语句时得到的一个动态对象为_。 A. s B. s-a C. s.a D. *s D 144. 假定 AB为一个类,则执行“AB r1=r2; ”语句时将自动调用该类的( )。 A. 无参构造函数 B. 带参构造函数 C. 赋值重载函数 D. 拷贝构造函数 B 145. 若需要使类中的一个指针成员指向一块动态存储空间,则通常在( )函数中完成。 A. 析构 B. 构造 C. 任一成员 D. 友元名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选
22、学习资料 - - - - - - - - - - - - - - - 第 5 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆 A 146. 当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储( )个整数。 A. n B. n+1 C. n-1 D. 1 C 147. 假定一个类的构造函数为“ A(int aa, int bb) a=aa; b=aa*bb;”,则执行“ A x(4,5);”语句后,x.a 和 x.b 的值分别为 ( )。 A. 4和 5 B. 5和 4 C. 4和 20 D. 20和 5 D 148.
23、 假定一个类的构造函数为“A(int aa=1, int bb=0) a=aa; b=bb;”,则执行“A x(4);”语句后, x.a和 x.b 的值分别为 ( )。 A. 1和 0 B. 1和 4 C. 4和 1 D. 4 和 0 B 149. 假定 AB为一个类,则 ( )为该类的拷贝构造函数的原型说明。 A. AB(AB x); B. AB(AB& x); C. void AB(AB& x); D. AB(int x); C 150. 假定一个类的构造函数为“ B(int ax, int bx): a(ax), b(bx) ”,执行“B x(1,2),y(3,4);x=y;”语句序列后
24、x.a 的值为 ( )。 A. 1 B. 2 C. 3 D. 4 D 151. 假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为 ( )。 A. AB() a=0; B. AB(int aa=0): a(aa) C. AB(int aa): a(aa) D. AB() C 152. 假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为( )。 A. AB() B. AB(): a(0) C. AB(int aa=0) a=aa; D. AB(int aa) D 153. 对于任一个类,用户所能定义的构造函数的个数至多为(
25、)。 A. 0 B. 1 C. 2 D. 任意个 B 154. 对于任一个类,用户所能定义的析构函数的 个数至多为 ( )。 A. 0 B. 1 C. 2 D. 任意个 A 155. 假定 AB为一个类,则执行“AB *px=new ABn;”语句时将 ( )。 A. 动态分配一个数组 B. 动态分配一个对象 C. 静态分配一个数组 D. 静态分配一个对象 C 156. 设 px 是指向一个类对象的指针变量,则执行“delete px;”语句时,将自动调用该类的( )。 A. 无参构造函数 B. 带参构造函数 C. 析构函数 D. 拷贝构造函数 D 157. 当一个类对象离开它的作用域时,系统
26、自动调用该类的( )。 A. 无参构造函数 B. 带参构造函数 C. 拷贝构造函数 D. 析构函数 C 158. 假定一个类对象数组为An ,当离开它定义的作用域时,系统自动调用该类析构函数的次数为( )。 A. 0 B. 1 C. n D. n-1 D 159. 假定 AB为一个类,则执行“AB a10;”语句时调用该类无参构造函数的次数为( )。 A. 0 B. 1 C. 9 D. 10 A 160. 假定 AB为一个类,则执行“AB *px=new ABn;”语句时调用该类无参构造函数的次数为( )。 A. n B. n-1 C. 1 D. 0 A 161. 假定 AB为一个类,则执行“
27、AB a, b(3), *p;”语句时共调用该类构造函数的次数为( )。 A. 2 B. 3 C. 4 D. 5 *P 无调用 B 162. 假定 AB为一个类,则执行“AB a(2), b3, *p4;”语句时共调用该类构造函数的次数为( )。 A. 3 B. 4 C. 5 D. 9 B3 调用 3 次 D 163. 假定 AB为一个类,则执行“AB a, b(2), c3, *p=&a; ”语句时共调用该类无参 构造函数的次数为( )。 A. 5 B. 6 C. 3 D. 4 B 164. 假定 AB为一个类,则执行“AB *p=new AB(1,2);”语句时共调用该类构造函数的次数为(
28、 )。 A. 0 B. 1 C. 2 D. 3 C 165. 假定 AB为一个类, px 为指向该类的一个含有n 个对象 的动态数组的指针,则执行“delete px;”语句时共调用该类析构函数的次数为( )。 A. 0 B. 1 C. n D. n+1 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆 B 166. 对类对象成员的初始化是通过构造函数中给出的( )实现的。 A. 函
29、数体 B. 初始化表 C. 参数表 D. 初始化表或函数体 C 167. 对类中常量成员的初始化是通过构造函数中给出的( )实现的。 A. 函数体 B. 参数表 C. 初始化表 D. 初始化表或函数体 C 168. 对类中引用成员的初始化是通过构造函数中给出的( )实现的。 A. 函数体 B. 参数表 C. 初始化表 D. 初始化表或函数体 D 169. 类的构造函数可以带有( )个参数。 A. 0 B. 1 C. 2 D. 任意 A 170. 类的析构函数可以带有( )个参数。 A. 0 B. 1 C. 2 D. 任意 C 171. 一个类的静态数据成员所表示属性 ( )。 A. 是类的或对
30、象的属性 B. 只是对象的属性 C. 只是类的属性 D. 类和友元的属性 D 172. 类的静态成员的访问控制()。 A. 只允许被定义为private B. 只允许被定义为private或 protected C. 只允许被定义为public D. 可允许被定义为private、protected或 public B 173. 静态成员函数对类的数据成员访问()。 A. 是不允许的 B. 只允许是静态数据成员 C. 只允许是非静态数据成员 D. 可允许是静态数据成员或非静态数据成员 A 174. 被非静态成员函数访问的类的数据成员( )。 A. 可以是非静态数据成员或静态数据成员 B. 不可
31、能是类的静态数据成员 C. 只能是类的非静态数据成员 D. 只能是类的静态数据成员 D 175. 静态数据成员的初始化是在()中进行的。 A. 构造函数 B. 任何成员函数 C. 所属类 D.全局区 D 176. 当将一个类A或函数 f() 说明为另一个类B的友元后,类A或函数 f() 能够直接访问类B的()。 A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员 C 177. 引入友元的主要目的是为了()。 A. 增强数据安全性 B. 提高程序的可靠性 C. 提高程序的效率和灵活性 D. 保证类的封装性 A 178. 一个类的成员函数也可
32、以成为另一个类的友元函数,这时的友元说明()。 A.需加上类域的限定 B. 不需加上类域的限定 C. 类域的限定可加可不加 D. 不需要任何限定 D 179. 一个类的友元不是该类的成员,与该类的关系密切,所以它()。 A. 有 this指针,有默认操作的对象 B. 没有 this指针,可以有默认操作的对象 C. 有 this指针,不能执行默认操作 D. 没有 this指针,也就没有默认操作的对象 B 180. 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。 A. 作为友元函数重载的1 元运算符 B. 作为成员函数重载的1 元运算符 C. 作为友元函数重载的2 元运算符 D
33、. 作为成员函数重载的2 元运算符 B 181. 在成员函数中 进行双目运算符重载时,其参数表中应带有()个参数。 A. 0 B. 1 C. 2 D. 3 C 182. 双目运算符重载为普通函数 时,其参数表中应带有()个参数。 A. 0 B. 1 C. 2 D. 3 A 183. 如果表达式a+b 中的“+” 是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为 () 。名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 7 页,共 40 页 - - -
34、- - - - - - 学而不思则惘,思而不学则殆 A. a.operator+(b) B. b.operator+(a) C. operator+(a,b) D. operator(a+b) C 184. 如果表达式a=b 中的 “=” 是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为() 。 A. a.operator=(b) B. b.operator=(a) C. operator=(a, b) D. operator=(b,a) C 185. 如果表达式a+中的 “+” 是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为 () 。 A. a.operat
35、or+() B. operator+(a) C. operator+(a,1) D. operator+(1,a) D 186. 如果表达式 +a 中的 “+” 是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为 () 。 A. a.operator+(1) B. operator+(a) C. operator+(a,1) D. a.operator+() C 187. 关于运算符重载,下列说法正确的是()。 A. 重载时,运算符的优先级可以改变。 B. 重载时,运算符的结合性可以改变。 C. 重载时,运算符的功能 可以改变。 D. 重载时,运算符的操作数个数可以改变。 B 1
36、88. 关于运算符重载,下列说法正确的是()。 A. 所有的运算符都可以重载。 B. 通过重载,可以使运算符应用于自定义的数据类型。 C. 通过重载,可以创造原来没有的运算符。 D. 通过重载,可以改变运算符的优先级。 A 189. 一个程序中数组a 和变量 k 定义为“ int a510,k;”,且程序中包含有语句“a(2,5)=+k*3;”,则此语句中肯定属于重载操作符的是()。 A. ( ) B. = C. + D. * C 190. 假定 K是一个类名, 并有定义 “K k; int j; ” , 已知 K中重载了操作符 ( ) , 且语句“j=k(3);” 和“k(5)=99; ”都
37、能顺利执行,说明该操作符函数的原形只可能是()。 A. K operator ( ) (int); B. int operator ( )(int&); C. int & operator ( )(int); D. K &operator( )(int); D 191. 假定 M是一个类名,且M中重载了操作符=,可以实现M对象间的连续赋值,如“m1=m2=m3; ”。重载操作符=的函数原型最好是()。 A. int operaotor=(M); B. int operator=(M&); C. M operator=(M&); D. M& operator=(M); A 192. 下面是重载双
38、目运算符+的普通函数原形,其中最符合+原来含义的是()。 A. Value operator+(Value, Value); B. Value operator+(Value,int); C. Value &operator+(Value, Value); D. Value &operator+(Value&, Value&); A 193. 下面是重载双目运算符-的成员函数原形,其中最符合- 原来含义的是()。 A. Value Value:operator-(Value); B. Value Value:operator-(int); C. Value& Value:operator-(V
39、alue); D. Value& Value:operator-(Value&); D 194. 在重载一运算符时,若运算符函数的形参表中没有参数 ,则不可能的情况是()。 A. 该运算符是一个单目运算符。 B. 该运算符函数有一个隐含的参数this 。 C. 该运算符函数是类的成员函数。 D. 该运算符函数是类的友元函数。 B 195. 关于插入运算符a D. (*x ).a() 答案:B 解析:(P41) 对象访问成员的方式为:对象名. 成员。指针可以有两种: (* 对象指针 ). 成员或者对名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳
40、 精选学习资料 - - - - - - - - - - - - - - - 第 12 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆象指针-成员。 A选项是访问数据成员, B项是访问成员函数。15. 关于对象概念的描述中,说法错误的是()A. 对象就是 C语言中的结构变量B. 对象代表着正在创建的系统中的一个实体C. 对象是类的一个变量D. 对象之间的信息传递是通过消息进行的答案:A 16. 静态成员函数没有()A. 返回值B. this 指针C. 指针参数D. 返回类型答案:B 解析:(P107) 静态成员函数是普通的函数前加入static,它具有函数的所有
41、的特征:返回类型、形参,所以使用 (P107) 静态成员函数,指针可以作为形参,也具有返回值。静态成员是类具有的属性,不是对象的特征,而this 表示的是隐藏的对象的指针,因此静态成员函数没有this 指针。静态成员函数当在类外定义时,要注意不能使用static关键字作为前缀。由于静态成员函数在类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。17. 假定AB 为一个类,则执行“ AB a(2), b3,*p 4; ”语句时
42、调用该类构造函数的次数为()A. 3 B. 4 C. 5 D. 9 答案:B 解析:(P79)a(2) 调用1次带参数的构造函数, b3调用 3次无参数的构造函数,指针没有给它分配空间,没有调用构造函数。所以共调用构造函数的次数为4。18. 有关多态性说法不正确的是()A. C+ 语言的多态性分为编译时的多态性和运行时的多态性B. 编译时的多态性可通过函数重载实现C. 运行时的多态性可通过模板和虚函数实现D. 实现运行时多态性的机制称为动态多态性答案:C 解析:(P171) 多态性分为静态的和动态的。静态通过函数的重载 来实现,动态是通过 基类指针或基类引用和虚函数来实现的。所以错误的是 C项
43、。19. 假定一个类的构造函数为“A(int i=4, int j=0) a=i;b=j;”, 则执行“ A x (1);”语句后,x.a 和x.b 的值分别为()A. 1和0 B. 1和4 C. 4和0 D. 4和1 答案:A 解析:(P75) 带默认的构造函数,对应实参没有值时就采用形参值。调用构造函数时,i=1, 不采用默认值,而只有一个参数,j 采用默认值 0即j=0, 因此a=1,b=0, 选择A项。20. 类MyA 的拷贝初始化构造函数是()A. MyA() 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - -
44、 - - - - - - - - - - - - 第 13 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆B. MyA(MyA*) C. MyA(MyA&) D. MyA(MyA) 答案:C 解析:(P80) 复制即拷贝构造函数使用对象的引用作形参,防止临时产生一个对象,A无参构造函数,B是指针作为形参, D项是对象,所以选择 C 项。21. 友元关系不能()A. 提高程序的运行效率B. 是类与类的关系C. 是一个类的成员函数与另一个类的关系D. 继承答案:D 解析:(P111) 友元可以是函数与类的关系即友元函数,也可以类与类的关系即友元类,但友元不能继承,
45、是单向性,且不具有传递性。友元可以访问类中所有成员,提高了访问的方便性。因此选择D项。22. 下列不是描述类的成员函数的是()A. 构造函数B. 析构函数C. 友元函数D. 拷贝构造函数答案:C 解析:(P109) 构造函数、析构函数、拷贝构造函数都是特殊的成员函数,友元则不是成员函数。所以选择 C 项。23. 如果从原有类定义新类可以实现的是()A. 信息隐藏B. 数据封装C. 继承机制D. 数据抽象答案:C 解析:(P129) 继承指在原有类的基础上产生新类。数据封装即数据和操作组合在一起,形成类。信息的隐藏,通过访问权限来实现。数据抽象,将事物的特征抽象为数据成员或服务。因此选择C 项。
46、24. 下面有关类说法不正确的是()A. 一个类可以有多个构造函数B. 一个类只有一个析构函数C. 析构函数需要指定参数D. 在一个类中可以说明具有类类型的数据成员答案:C 解析:(P80) 构造函数可以有参数、可以重载、因此可以有多个,A项正确。析构函数只有一个不能重载、不能继承,没有返回值,B项正确, C项错误。25. this 指针存在的目的是()A. 保证基类私有成员在子类中可以被访问B. 保证基类保护成员在子类中可以被访问C. 保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码D. 保证基类公有成员在子类中可以被访问答案:C 解析:(P86)C+要求函数在被调用之前,应当让
47、编译器知道该函数的原型,以便编译器利用函数原型提供的信息去检查调用的合法性,强制参数转换成为适当类型,保证参数的正确传递。对于名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -精心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 14 页,共 40 页 - - - - - - - - - 学而不思则惘,思而不学则殆标准库函数,其声明在头文件中,可以用#include 宏命令包含这些原型文件;对于用户自定义函数,先定义、后调用的函数可以不用声明,但后定义、先调用的函数必须声明。一般为增加程序的可理解性,常将主函数放在程序开
48、头,这样需要在主函数前对其所调用的函数一一进行声明,以消除函数所在位置的影响。所以选择C项。26.关于new 运算符的下列描述中,错误的是()A. 它可以用来动态创建对象和对象数组B. 使用它创建的对象或对象数组可以使用运算符delete 删除C. 使用它创建对象时要调用构造函数D. 使用它创建对象数组时必须指定初始值答案:D 解析:(P78) new 创建的对象数组不能指定初始值,所以调用无参的构造函数,选择D 项。27.已知: p是一个指向类 A数据成员 m 的指针, A1是类A的一个对象。如果要给 m 赋值为 5,正确的是()A. A1.p=5; B. A1-p=5; C. A1.*p=
49、5; D. *A1.p=5; 答案:C 解析:(P118)A中p是指针即地址,错误; B选项中 A1不是指针不能使用指向运算符-, 错误;“*”比“ . ”级别要高,所以 D选项*A1.p=5相当于 (*A1).p=5;错误。另外涉及到指向成员函数时注意以下几点:指向成员函数的指针必须于其赋值的函数类型匹配的三个方面:(1) 参数类型和个数; (2) 返回类型;(3) 它所属的类类型。成员函数指针的声明:指向short 型的Screen类的成员的指针定义如下: short Screen:* ps_Screen; ps_Screen可以用 _height 的地址初始化如下: short Scre
50、en:*ps_Screen=&Screen:_height; 类成员的指针必须总是通过特定的对象或指向改类型的对象的指针来访问。是通过使用两个指向成员操作符的指针 ( 针对类对象和引用的 .* ,以及针对指向类对象的指针的-*) 。28.以下基类中的成员函数表示纯虚函数的是()A. virtual void tt()=0 B. void tt(int)=0 C. virtual void tt(int) D. virtual void tt(int) 答案:A 解析:(P173) 当在基类中不能为虚函数给出一个有意义的实现时,可以将其声明为纯虚函数,实现由派生类完成。格式: virtual()