C++语言程序设计自测练习
一、单项选择题
1. 面向对象软件开发中使用的OOA表示( )。 A. 面向对象分析 B. 面向对象设计 C. 面向对象语言 D. 面向对象方法
2. 面向对象软件开发中使用的OOD表示( )。 A. 面向对象分析 B. 面向对象设计 C. 面向对象语言 D. 面向对象方法
3. 关于面向对象系统分析,下列说法中不正确的是( )。 A. 术语“面向对象分析”可以用缩写OOA表示
B. 面向对象分析阶段对问题域的描述比实现阶段更详细 C. 面向对象分析包括问题域分析和应用分析两个步骤 D. 面向对象分析需要识别对象的内部和外部特征 4. 在一个类的定义中,包含有( )成员的定义。
A. 数据 B. 函数 C. 数据和函数 D. 数据或函数 5. 在类作用域中能够通过直接使用该类的( )成员名进行访问。 A. 私有 B. 公用 C. 保护 D. 任何 6. 在关键字public后面定义的成员为类的( )成员。 A. 私有 B. 公用 C. 保护 D. 任何 7. 在关键字private后面定义的成员为类的( )成员。 A. 私有 B. 公用 C. 保护 D. 任何
8. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。
A. x(a) B. x[a] C. x->a D. x.a
9. 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为( )。
A. x.a B. x.a() C. x->a D. x->a()
10. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( )。
A. px(a) B. px[a] C. px->a D. px.a
11. 假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为( )。
A. x.a B. x.a() C. x->GetValue() D. x.GetValue()
12. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( )。
A. int AA::a() B. int AA:a() C. AA::a() D. AA::int a()
13. 假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,则书写格式为( )。
A. a B. AA::a C. a() D. AA::a()
14. 若需要把一个类外定义的成员函数指明为内联函数,则必须把关键字( )放在函数原
1
型或函数头的前面。
A. in B. inline C. inLine D. InLiner
15. 在多文件结构的程序中,通常把类的定义单独存放于( )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件
16. 在多文件结构的程序中,通常把类中所有非内联函数的定义单独存放于( )中。 A. 主文件 B. 实现文件 C. 库文件 D. 头文件 17. 在多文件结构的程序中,通常把含有main()函数的文件称为( )。 A. 主文件 B. 实现文件 C. 程序文件 D. 头文件 18. 一个C++程序文件的扩展名为( )。
A. .h B. .c C. .cpp D. .cp
19. 在C++程序中使用的cin标识符是系统类库中定义的( )类中的一个对象。 A. istream B. ostream C. iostream D. fstream
20. 在C++程序中使用的cout标识符是系统类库中定义的( )类中的一个对象。 A. istream B. ostream C. iostream D. fstream
21. 假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数的类型为( )。
A. int B. char C. AA D. AA*
22. 假定AA是一个类,abc是该类的一个成员函数,则参数表中隐含的第一个参数为( )。 A. abc B. *this C. this D. this& 23. 假定AA是一个类,“AA& abc();”是该类中一个成员函数的原型,若该函数存在对*this赋值的语句,当用x.abc()调用该成员函数后,x的值( )。 A. 已经被改变 B. 可能被改变
C. 不变 D.不受函数调用的影响 24. 假定AA是一个类,“AA* abc()const;”是该类中一个成员函数的原型,若该函数返回this值,当用x.abc()调用该成员函数后,x的值( )。 A. 已经被改变 B. 可能被改变
C. 不变 D. 受到函数调用的影响 25. 类中定义的成员默认为( )访问属性。
A. public B. private C. protected D. friend 26. 结构中定义的成员默认为( )访问属性。
A. public B. private C. protected D. friend
27. 当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为( )。
A. n B. n+1 C. n-1 D. n-2
28. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾(即最后一个)元素的位置为( )。
A. length+1 B. first+length
C. (first+length-1)%MS D. (first+length)%MS
29. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队尾的后一个位置为( )。
A. length+1 B. first+length
C. (first+length-1)%MS D. (first+length)%MS
2
30. 在一个用数组实现的队列类中,假定数组长度为MS,队首元素位置为first,队列长度为length,则队首的后一个位置为( )。
A. first+1 B. (first+1)%MS
C. (first-1)%MS D. (first+length)%MS
31. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队非空,则进行插入时必须把新结点的地址赋给( )。
A. elemHead B. elemTail
C. elemHead->next和elemHead D. elemTail->next和elemTail
32. 在一个用链表实现的队列类中,假定每个结点包含的值域用elem表示,包含的指针域用next表示,链队的队首指针用elemHead表示,队尾指针用elemTail表示,若链队为空,则进行插入时必须把新结点的地址赋给( )。
A. elemHead B. elemTail
C. elemHead和elemTail D. elemHead或elemTail 33. 队列具有( )的操作特性。
A. 先进先出 B. 先进后出 C. 进出无序 D. 进出任意 34. 栈具有( )的操作特性。
A. 先进先出 B. 先进后出 C. 进出无序 D. 进出任意 35. 对于一个类的构造函数,其函数名与类名( )。
A. 完全相同 B. 基本相同 C. 不相同 D. 无关系 36. 对于一个类的析构函数,其函数名与类名( )。
A. 完全相同 B. 完全不同 C. 只相差一个字符 D. 无关系 37. 类的构造函数是在定义该类的一个( )时被自动调用执行的。 A. 成员函数 B. 数据成员 C. 对象 D. 友元函数 38. 类的析构函数是一个对象被( )时自动调用的。 A. 建立 B. 撤消 C. 赋值 D. 引用 39. 一个类的构造函数通常被定义为该类的( )成员。 A. 公用 B. 保护 C. 私有 D. 友元 40. 一个类的析构函数通常被定义为该类的( )成员。 A. 私有 B. 保护 C. 公用 D. 友元
41. 假定AB为一个类,则执行 “AB x;”语句时将自动调用该类的( )。
A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数 42. 假定AB为一个类,则执行 “AB x(a,5);”语句时将自动调用该类的( )。 A. 带参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数
43. 假定AB为一个类,则执行 “AB *s=new AB(a,5);”语句时得到的一个动态对象为_______。 A. s B. s->a C. s.a D. *s
44. 假定AB为一个类,则执行 “AB r1=r2;”语句时将自动调用该类的( )。 A. 无参构造函数 B. 带参构造函数 C. 赋值重载函数 D. 拷贝构造函数
45. 若需要使类中的一个指针成员指向一块动态存储空间,则通常在( )函数中完成。 A. 析构 B. 构造 C. 任一成员 D. 友元
46. 当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储( )个整数。
3
A. n B. n+1 C. n-1 D. 1
47. 假定一个类的构造函数为 “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
48. 假定一个类的构造函数为 “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
49. 假定AB为一个类,则( )为该类的拷贝构造函数的原型说明。
A. AB(AB x); B. AB(AB& x); C. void AB(AB& x); D. AB(int x);
50. 假定一个类的构造函数为 “B(int ax, int bx): a(ax), b(bx) {}”,执行 “B x(1,2),y(3,4);x=y;”语句序列后x.a的值为( )。 A. 1 B. 2 C. 3 D. 4
二、填空
1.假定a是一个一维指针数组,则a+i所指对象的地址比a大________字节。 2. 假定a是一个一维数组,则a[i]的指针访问方式为________。
3. 假定a是一个一维数组,则a[i]对应的存储地址(以字节为单位)为____________。 4. 一个数组的数组名实际上是指向该数组________元素的指针,并且在任何时候都不允许________它。
5. 假定指向一维数组b中元素b[4]的指针为p,则p+3所指向的元素为_______,p-2所指向的元素为________。
6.若要定义整型指针p并初始指向x,则所使用的定义语句为________。 7. 若p指向x,则________与x的表示是等价的。
8. 在一个二维数组int a[m][n]中,包含的一维元素a[i]的类型为________,访问a[i]时返回值的类型为________。
9. 假定一个二维数组为c[5][8],则c[3]的值为二维元素________的地址,c[3]+2的值为二维元素________的地址。
10. 假定p为指向二维数组int d[4][6]的指针,则p的类型为________。 11. 假定a是一个二维数组,则a[i][j]的指针访问方式为____________。 12. 若要把y定义为整型变量x的引用,则所使用的定义语句为________。 13. 若y是x的引用,则对y的操作就是对_______的操作。
14. 若y是x的引用,则&y和&x的值________,即为变量________的地址。 15. 执行int p=new int操作得到的一个动态分配的整型对象为________。
16. 执行int *p=new int[10]操作,使p指向动态分配的数组中下标为0的元素,该元素可表示为_______或________。
17. 执行char *p=new char(’a’)操作后,p所指向的数据对象的值为________。 18. 执行new char[m][n]操作时的返回值的类型为________。 19. 执行________操作将释放由p所指向的动态分配的数据空间。 20. 执行________操作将释放由p所指向的动态分配的数组空间。
21. NULL是一个符号常量,通常作为空指针值,它的具体值为________。 22. 变量v定义为“double v=23.4;”,要使指针pv指向v,则定义pv的语句为______________。 23. 已知语句“cout<
4
24. 已知语句“cout<
25. 指针变量pv和pc定义为“void *pv =”Hello, word!”; char *pc;”,要将pv值赋给pc,则正确的赋值语句是_______________。 26. 数组b定义为“int b[20][100];”,要使p[j][k] 与b[j][k] 等效,则指针p应定义为__________________。
27. 与结构成员访问表达式p->name等价的表达式是____________。 28. 与结构成员访问表达式(*fp).score等价的表达式是____________。 29. 已知变量a定义为“int a=5;”,要使ra成为a的引用,则ra应定义为____________。 30. 已知有定义“int x, a[]={5,7,9}, *pa=a;”,在执行“x=++*pa;”语句后,x的值是________。 31.已知有定义“int x, a[]={6,10,12}, *pa=a;”,在执行“x=*++pa;”语句后,*pa的值是________。
32. 已知有定义“int x, a[]={15,17,19}, *pa=a;”,在执行“x=*pa++;”后,*pa的值是________。 33. 以面向对象方法构造的系统,其基本单位是__________。 34. 每个对象都是所属类的一个__________。
35. 对象将其大部分实现细节隐藏起来,这种机制称为__________。 36. 基类和派生类的关系称为__________。
37. 复杂对象可以由简单对象构成,这种现象称为__________。
38. 对象是对问题域中客观事物的________,它是一组属性和在这些属性上操作的__________。
39. 特殊类的对象拥有其一般类的全部属性与操作,称特殊类________了一般类。 40. 如果一个派生类的基类不止一个,则这种继承称为____________。
41. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为__________。 42. C++支持两种多态性:_________时的多态性和__________时的多态性。
43. 在C++中,编译时的多态性是通过__________实现的,而运行时的多态性则是通过__________实现的。
44. 面向对象软件开发的生命周期分为三个阶段,即分析、__________和__________。 45. 面向对象的分析包括__________分析和__________分析两步。 46. 类定义中,既包含数据成员,也包含________成员。 47. 类中的数据成员的访问属性通常被指明为________。
48. 类中的供外部调用定义的函数成员,其访问属性通常被定义为________。 49. 对于类中定义的任何成员,其隐含访问权限为________。 50. 对于结构中定义的任何成员,其隐含访问权限为________。
51. 为了使类中的成员不能被类外的函数通过成员操作符访问,则应把该成员的访问权限定义为________。
52. 若在类的定义体中给出了一个成员函数的完整定义,则该函数属于________函数。
53. 若在类的定义体中只给出了一个成员函数的原型,而在类外给出完整定义时,则其函数名前必须加上________和两个冒号分隔符。
54. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和________分隔符。
55. 若要把类外定义的成员函数规定为内联函数,则必须把________关键字放到函数原型或函数头的前面。
5