《c++》复习题集及答案

内容发布更新时间 : 2024/12/24 4:23:54星期一 下面是文章的全部内容请认真阅读。

A. 是不允许的 B. 只允许是静态数据成员

C. 只允许是非静态数据成员 D. 可允许是静态数据成员或非静态数据成员 174. 被非静态成员函数访问的类的数据成员( A )。

A. 可以是非静态数据成员或静态数据成员 B. 不可能是类的静态数据成员 C. 只能是类的非静态数据成员 D. 只能是类的静态数据成员 175. 静态数据成员的初始化是在( D )中进行的。 A. 构造函数 B. 任何成员函数 C. 所属类 D. 全局区

176. 当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的( D )。

A. 只能是公有成员 B. 只能是保护成员 C. 只能是除私有成员之外的任何成员 D. 具有任何权限的成员 177. 引入友元的主要目的是为了( C )。

A. 增强数据安全性 B. 提高程序的可靠性 C. 提高程序的效率和灵活性 D. 保证类的封装性

178. 一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( A )。 A. 需加上类域的限定 B. 不需加上类域的限定 C. 类域的限定可加可不加 D. 不需要任何限定

179. 一个类的友元不是该类的成员,与该类的关系密切,所以它( D )。 A. 有this指针,有默认操作的对象 B. 没有this指针,可以有默认操作的对象 C. 有this指针,不能执行默认操作

D. 没有this指针,也就没有默认操作的对象

180. 在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是( B )。 A. 作为友元函数重载的1元运算符 B. 作为成员函数重载的1元运算符 C. 作为友元函数重载的2元运算符 D. 作为成员函数重载的2元运算符 181. 在成员函数中进行双目运算符重载时,其参数表中应带有( B )个参数。 A. 0 B. 1 C. 2 D. 3

182. 双目运算符重载为普通函数时,其参数表中应带有( C )个参数。 A. 0 B. 1 C. 2 D. 3

183. 如果表达式a+b中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( A )。

A. a.operator+(b) B. b.operator+(a) C. operator+(a,b) D. operator(a+b)

184. 如果表达式a==b中的“==”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为( C )。

A. a.operator==(b) B. b.operator==(a) C. operator==(a,b) D. operator==(b,a)

185. 如果表达式a++中的“++”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为( C )。

A. a.operator++() B. operator++(a) C. operator++(a,1) D. operator++(1,a)

186. 如果表达式++a中的“++”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为( D )。

A. a.operator++(1) B. operator++(a)

9

C. operator++(a,1) D. a.operator++() 187. 关于运算符重载,下列说法正确的是( C )。 A. 重载时,运算符的优先级可以改变。 B. 重载时,运算符的结合性可以改变。 C. 重载时,运算符的功能可以改变。

D. 重载时,运算符的操作数个数可以改变。 188. 关于运算符重载,下列说法正确的是( B )。 A. 所有的运算符都可以重载。

B. 通过重载,可以使运算符应用于自定义的数据类型。 C. 通过重载,可以创造原来没有的运算符。 D. 通过重载,可以改变运算符的优先级。

189. 一个程序中数组a和变量k定义为“int a[5][10],k;”,且程序中包含有语句“a(2,5)=++k*3;”,则此语句中肯定属于重载操作符的是( A )。 A. ( ) B. = C. ++ D. *

190. 假定K是一个类名,并有定义“K k; int j;”,已知K中重载了操作符 ( ),且语句“j=k(3);”和“k(5)=99;”都能顺利执行,说明该操作符函数的原形只可能是( C )。 A. K operator ( ) (int); B. int operator ( )(int&); C. int & operator ( )(int); D. K &operator( )(int);

191. 假定M是一个类名,且M中重载了操作符=,可以实现M对象间的连续赋值,如“m1=m2=m3;”。重载操作符=的函数原型最好是( D )。

A. int operaotor=(M); B. int operator=(M&); C. M operator=(M&); D. M& operator=(M);

192. 下面是重载双目运算符+的普通函数原形,其中最符合+原来含义的是( A )。 A. Value operator+(Value, Value); B. Value operator+(Value,int);

C. Value &operator+(Value, Value); D. Value &operator+(Value&, Value&); 193. 下面是重载双目运算符-的成员函数原形,其中最符合-原来含义的是( A )。 A. Value Value::operator-(Value); B. Value Value::operator-(int); C. Value& Value::operator-(Value); D. Value& Value::operator-(Value&); 194. 在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是( D )。 A. 该运算符是一个单目运算符。 B. 该运算符函数有一个隐含的参数this。 C. 该运算符函数是类的成员函数。 D. 该运算符函数是类的友元函数。

195. 关于插入运算符<<的重载,下列说法不正确的是( B )。 A. 运算符函数的返回值类型是ostream & 。 B. 重载的运算符必须定义为类的成员函数。

C. 运算符函数的第一个参数的类型是ostream & 。 D. 运算符函数有两个参数。

196. 从一个基类派生出的各个类的对象之间( C )。

A. 共享所有数据成员,每个对象还包含基类的所有属性 B. 共享部分数据成员,每个对象还包含基类的所有属性

C. 不共享任何数据成员,但每个对象还包含基类的所有属性 D. 共享部分数据成员和函数成员

10

197. 如果是类B在类A的基础上构造,那么,就称( B )。 A. 类A为基类或父类,类B为超类或子类

B. 类A为基类、父类或超类,类B为派生类或子类 C. 类A为派生类,类B为基类

D. 类A为派生类或子类,类B为基类、父类或超类 198. C++的继承性允许派生类继承基类的( C )。

A. 部分特性,并允许增加新的特性或重定义基类的特性 B. 部分特性,但不允许增加新的特性或重定义基类的特性 C. 所有特性,并允许增加新的特性或重定义基类的特性 D. 所有特性,但不允许增加新的特性或重定义基类的特性 199. 派生类的成员函数可以直接访问基类的( B )成员。

A. 所有 B. 公有和保护 C. 保护和私有 D. 私有 200. 对于公有继承,基类的公有和保护成员在派生类中将( D )成员。 A. 全部变成公有 B. 全部变成保护

C. 全部变成私有 D. 仍然相应保持为公有和保护 201. 对于公有继承,基类中的私有成员在派生类中将 ( C )。

A. 能够直接使用成员名访问 B. 能够通过成员运算符访问 C. 仍然是基类的私有成员 D. 变为派生类的私有成员

202. 当保护继承时,基类的( B )在派生类中成为保护成员,在类作用域外不能够通过派生类的对象来直接访问该成员。

A. 任何成员 B.公有成员和保护成员 C. 保护成员和私有成员 D.私有成员

203. 在定义一个派生类时,若不使用保留字显式地规定采用何种继承方式,则默认为( A )方式。

A. 私有继承 B. 非私有继承 C. 保护继承 D. 公有继承

204. 建立包含有类对象成员的派生类对象时,自动调用构造函数的执行顺序依次为( C )的构造函数。

A. 自己所属类、对象成员所属类、基类 B. 对象成员所属类、基类、自己所属类 C. 基类、对象成员所属类、自己所属类 D. 基类、自己所属类、对象成员所属类

205. 当派生类中有和基类一样名字的成员时,一般来说,( B )。

A. 将产生二义性 B. 派生类的同名成员将覆盖基类的成员 C. 是不能允许的 D. 基类的同名成员将覆盖派生类的成员 206. C++中的虚基类机制可以保证:( D )。 A. 限定基类只通过一条路径派生出派生类

B. 允许基类通过多条路径派生出派生类,派生类也就能多次继承该基类

C. 当一个类多次间接从基类派生以后,派生类对象能保留多份间接基类的成员 D. 当一个类多次间接从基类派生以后,其基类只被一次继承 207. 下列对派生类的描述中错误的说法是:( D )。 A. 派生类至少有一个基类

B. 派生类可作为另一个派生类的基类

C. 派生类除了包含它直接定义的成员外,还包含其基类的成员 D. 派生类所继承的基类成员的访问权限保持不变

11

208. 派生类的对象对其基类中( A )可直接访问。 A. 公有继承的公有成员 B. 公有继承的私有成员 C. 公有继承的保护成员 D. 私有继承的公有成员

二、判断题

1.C++中标识符内的大小写字母是没有区别的。(F ) 2.C++是一种以编译方式实现的高级语言。(T )

3.计算函数参数顺序引起的二义性是由不同的编译系统决定的。(T ) 4.返回值类型、参数个数和类型都相同的函数也可以重载。(F )

5.使用关键字class定义的类中缺省的访问权限是私有(private)的。(T )

6.类的私有成员只能被类中的成员函数访问,任何类以外的函数对它们的访问都是非法的。(F )

7.多继承情况下,派生类的构造函数的执行顺序取决于成员初始化列表中的顺序。(F ) 8.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。(F ) 9.在私有继承中,基类中所有成员对派生类都是不可见的。(F )

10.在保护继承中,对于垂直访问等同于公有继承,对于水平访问等同于私有继承。(T ) 11.构造函数可以声明为虚函数。(F )

12.在析构函数中调用虚函数时,采用动态束定。(F )

13.在一个成员函数内调用一个虚函数时,对该虚函数的调用进行动态束定。(T ) 14.公有继承可以实现子类型。(T ) 15.构造函数可以声明为纯虚函数。(F )

16.说明函数原型时不需要指明每个函数参数的名字,只需要说明每个参数的类型和返回值类型就可以了。对

17.所有的表达式都有值。错

18.程序的编译是以文件为单位的,因此将程序分到多个文件中可以减少每次对程序修改所

带来的编译工作量。对

19.类的静态数据成员需要在定义每个类的对象时进行初始化。错

20.基类中被说明为protected和private的成员只能被其派生类的成员函数访问,不能被

其它的函数访问。错

21.当将一个类S定义为另一个类A的友元类时,类S的所有成员函数都可以直接访问类A

的所有成员。对

22.当函数的返回值是数组类型的,传递的是数组第一个元素的地址。错

23.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型相同,那么,这

个函数自动继承基类中虚函数的特性。对

24.字符串’hello,world”在内存中存放时,占用11个字节的空间。错

12

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi