|
22秋学期(高起本1709-1803、全层次1809-2103)《面向对象程序设计》在线作业-00002+ W- s# P* Q5 ^+ |6 y. m' \
试卷总分:100 得分:1004 N. t2 ~$ ?, B4 i6 T! l
一、单选题 (共 35 道试题,共 70 分)
{1 O3 q) |1 w3 P0 [1.空类的声明( )是正确的。
& Y u) z4 M/ N0 e4 {& b FA.class类名;( }: Q. S* A3 S
B.class类名{};; v) |, t5 M- q
C.class类名{}
: _* F( i& o' yD.class类名
' [2 l- f( I; K8 x& y资料:# ^1 \4 E4 w1 f- p3 c( K# J7 R
3 \$ c/ B, y) ]( s ~0 X
2.关于抽象类, 下列表述正确的是( )。
+ ]: C' t- O4 |9 m8 p$ BA.抽象类的成员函数中至少有一个没有实现的函数(即无函数体定义的函数)4 B1 c. t- H5 M! G; T& H
B.派生类必须实现作为基类的抽象类中的纯虚函数
5 C# U7 m i+ J% g: Q( MC.派生类不可能成为抽象类- m1 g' b8 l/ ?" C ]
D.抽象类不能用于定义对象
& v1 G8 D) |$ w4 r9 ~" t资料:* A. I: i6 t+ Z
! i4 y' L* Q, R( z
3.下列( )是构造函数的特征。6 M$ G- @. x7 g, s! j( c. K
A.构造函数在创建对象时自动调用( p8 T6 i: e& p# x# r) G. x
B.构造函数不可以重载0 D$ C$ l* s. X5 S# c
C.构造函数不可以设置默认参数3 ]6 t- w5 J0 h* g* v: E) B& e
D.构造函数必须指定函数类型7 Y. V/ w# N# R. I9 Q
资料:3 ]8 b: f* W0 d4 }5 {, s
" y' H4 V# W! p- S4 r8 w) T- `' X$ U4.C++对C语言做了很多改进,下列描述中( )使得C语言发生了质变,即从面向过程变成面向对象。
0 @& D+ n5 T: F" u* ^0 h' dA.增加了一些新的运算符
7 Q; w2 Q/ D: t4 nB.允许函数重载,并允许设置默认参数
/ ^, F0 y4 F0 V+ E; I5 yC.规定函数说明必须用原型
6 s- y) ]0 \8 e- C: V- rD.引进类和对象的概念
) O1 l7 {) a+ d1 H" a( Z( d资料:
% L* d- \0 k9 T$ d" _, N4 x% [0 W. U% F# c( w3 @1 u
5.在一个类中,可以对一个操作符进行()重载。 s* ], l; v' J) U7 r- F8 h
A.1种
4 x. n; Q6 ?# c3 [( K8 i8 K7 P" JB.2种
! Q& ?, D% H! k& v; NC.3种& G* Y. g9 q* l7 h! E! g3 ~: \
D.多种
8 m" n; N0 t( A3 I7 [: j资料:
. r$ \& e5 R* J; y, _, M( C4 T2 ^+ ~9 @9 ?5 j1 W7 n; d& A! M" h0 w& Z
6.在C++中,关于下列设置参数默认值的描述中,正确的是( )。; C( n3 ^, _1 S9 r7 p. Q1 e
A.不允许设置参数的默认值* j" h) ~% B# q, f# _+ w: r
B.设置参数默认值只能在定义函数时设置
9 p4 M8 Z1 j! t* Z5 nC.设置参数默认值时,应该是先设置右边的再设置左边的* L% ^( E" z) n7 C0 R
D.设置参数默认值时,应该全部参数都设置& b7 A* B( i' I% G. r% g0 a' a$ V
资料:
. B! S4 [3 k4 g# h. Q/ c, G/ O$ x4 O6 ?3 q* }# ]
7.类aClass的定义如下: class aClass {public: aClass(){} aClass(int i){value=new int(i);} int *value; } 若要对类中的value赋值,则下面的语句中,正确的是()。
0 W" X' j: w$ vA.aClass my; my.value=10;
& u$ G" ]. U: |/ ~B.aClass my; *my.value=10;; P. G. I8 N1 D F& p& k
C.aClass my; my.*value=10;
5 ]5 F9 |+ |% o1 sD.aClass my(10);& W v2 f6 W2 z) W9 K1 V% S
资料:
' {& K: G" `) I2 [5 O% L) D
' B' Z1 W0 T9 i* N. e0 I' m; N- z& y8.下面对析构函数的正确描述是( )。
5 i+ G. }! J3 s3 JA.系统不能提供默认的析构函数- L; O+ X2 I0 F1 p
B.析构函数必须由用户定义
8 S( J9 V1 |% H- S. I5 RC.析构函数没有参数4 h8 C; `, l8 j2 q2 y. N" J
D.析构函数可以设置默认参数. f' W( O0 X; I# Z& V
资料:
3 [, s! \1 f2 w0 i1 t% O6 T( r5 p# K4 I' u8 z6 T
9.类MyClass的定义如下: class MyClass { public: MyClass() { value = 0;} SetVariable(int i) { value = i; } private: int value; } 则对下列语句序列正确的描述是()。 MyClass *p,my; p=&my;
; D( g; F& }, J8 z& ?2 wA.语句p=&my;是把对象my赋值给指针变量p
. Y4 a) u* R; O8 ]B.语句MyClass *p,my;会调用两次类MyClass的构造函数# Z. ]6 `: M$ r! K N X
C.对语句 *p.SetVariable(5)的调用是正确的! ^% A/ t% ~; b/ C( F
D.语句p->SetVariable(5)与语句my.SetVariable(5)等价! N7 _* _; D4 }4 a6 K3 o+ f" U
资料:
" O: e( V% G1 R
& h5 p. w, K# |" K7 u10.若类中有指针成员变量,则应编写(),使得在对象销毁时能够自动调用该函数释放指针成员变量所指向的内存空间。
/ B: Y) R$ m2 rA.友元函数4 H8 E, ~& Y, T
B.虚函数* k. g( M5 F9 W0 z; `
C.构造函数
% y4 ~4 ]7 x$ ~) f; mD.析构函数+ n; g. e* Q, W* L- W7 W
资料:
3 a0 g% B. D. K& C; P" H' r! a! d1 R E, j) ?! `
11.下面对构造函数的不正确描述是( )。! Q; F' o+ R* d# r* k, E2 `% e3 E
A.系统可以提供默认的构造函数
& [- _5 @5 ]$ v* ^! \B.构造函数可以有参数,所以可以有返回值9 L' C4 C+ S; D
C.构造函数可以重载6 E: ]+ W6 B A
D.构造函数可以设置默认参数
- n: x, `9 y8 w( V: e资料:
8 ~# L! @+ x# ~+ H
* p6 @/ P4 U7 x3 i7 z- z. }) K5 ? Y3 O12.在C++中,通过()的机制可以对原有的类进行扩充和完善以适应新的需要。: V( |3 f! p" _! d
A.继承
: d" C: v2 ~1 i, vB.封装 @. f6 e9 r7 Y7 i% [3 K" k
C.多态7 m d" N4 F, }4 G2 c" W
D.重载
) h) H6 w' w! @# [资料:% V9 e" e* p4 q0 i! x* k5 n; F
) @, C" h$ H* [' o: \13.设置虚基类的目的是()。5 m5 r. d" R+ e% l+ Q. x$ {
A.简化程序
5 q$ x0 y9 W( Y# d" W$ G( ^9 e- ?B.消除二义性
. `! ?9 p6 ?+ j6 Y R3 t) i, vC.提高运行效率+ n+ P( x9 ~7 `
D.减少目标代码4 o5 u: ]: L7 D+ L+ l8 X; w
资料:; g% J. K3 R$ c9 a
/ o& k1 N* g) k* r1 i
14.下列( )不是构造函数的特征。
% ]; z, R6 X# I6 G( n; |A.构造函数的函数名与类名相同
: j# \4 M, E" J& J# VB.构造函数可以重载 o. }$ B# f* X
C.构造函数可以设置默认参数
% U. O/ L+ K% O, N$ wD.构造函数必须指定类型说明
% }3 V: A0 q4 r2 ^资料:2 P. F2 L; e, f S- j$ U% \0 ^' @7 t
3 ^' J o7 F( o j15.将一个函数声明为某类的友元函数后,则在函数中不可以直接访问该类的()。: \3 X4 H9 t" l; A6 D6 K8 j# m
A.公有成员* L8 E$ c* N# r4 }- H' |
B.私有成员6 F0 d6 b6 [* ~1 K# z" J
C.保护成员
3 {% E' [) `+ i) ?7 D3 ?D.都可访问
8 r! P4 s0 m# U6 J1 T$ N资料:* q4 D6 [% ]& P w5 R' q
a" V _$ E1 M6 V9 c
16.用于类中虚成员函数说明的关键字( )。! \. i8 Y$ {2 M( {7 T0 X* ] M
A.virtual& f# e- }4 P$ X' { N3 g
B.public3 e8 O* F% ^0 j: Y$ U
C.protected: |, r7 p) } y
D.private
: [3 \" C$ w1 E8 r r* H# N资料:9 H8 n$ T3 R! @( p
, a& o6 S4 M8 R/ t# W$ H17.要在类对象上使用运算符,以下不用必须被重载的运算符是()。
- k! C0 w+ X' W, o/ ?" N2 pA.[ ]
4 ?; ^, G7 d' u1 z" s. j, NB.=' t% {, I* d: A2 u9 x1 C
C.++
! s4 K* g! c8 j L+ F" y. bD.--
7 t7 J% [# Q0 c6 j. K6 c- g资料:
# G V- {( m- [& V$ L0 a. j( P5 Y, s7 Q0 {$ c
18.下面叙述不正确的是( )。9 s6 b( H! F7 R
A.基类的保护成员在派生类中仍然是保护的
% S3 E- J! v& u, i; D- OB.基类的保护成员在公有派生类中仍然是保护的
4 V, B4 K7 Y0 Q& c2 h1 G9 |' \+ S3 \C.基类的保护成员在私有派生类中是私有的
0 @3 h" T5 Y# V4 N& U4 FD.对基类成员的访问必须是无二义性
( `1 H0 G' p4 |3 ~) F% d- V资料:
. E5 T2 W9 z; J. J ?0 M' _* V: I; w+ l
19.类A是类B的友元,类B是类C的友元,则( )是正确的。
. q8 s3 w& e' ~. [, P0 VA.类B是类A的友元9 Y0 k/ X- y" m) L1 |
B.类C是类A的友元
, R/ ^. [% o/ x6 SC.类A是类C的友元/ o# H6 k |' ]
D.以上都不对
4 A" F$ u! a; X9 z9 g7 l资料:' M* O8 Q" h! x7 U) L# V0 X- R5 l
4 t6 u- ~/ z* F! w7 u; K" k! _
20.有关析构函数的说法不正确的是( )。
/ X% W: W& ~6 K' B' v7 D4 b5 oA.析构函数有且仅有一个
* @% V7 M0 \6 A& o9 |B.析构函数和构造函数一样可以有形参+ W7 e& W: u* p4 U7 S/ k
C.析构函数的功能是用来释放一个对象- C, C2 ?9 a! G1 B5 V- O
D.析构函数无任何函数类型
0 l& R$ E. R$ b# u, I- l资料:
$ x+ {! i' m% o K0 H, w2 O4 y' N5 d& {! v
21.下列关于构造函数说法不正确的是()。 i" H2 N: n9 {0 J) l* M/ j
A.构造函数必须与类同名
+ I) r+ V+ \' E5 @6 ^2 bB.构造函数可以省略不写
# L. v+ s! p8 m9 m# IC.构造函数必须有返回值4 H- t; o0 L6 q: j
D.在构造函数中可以对类中的成员进行初始化
% ]3 G G8 M3 {$ z# d$ n! B资料:6 M* [4 F S- Y& b
$ G( k& v0 k# f3 a% P- y2 k22.在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。0 T S& M Q# {
A.operator+有两个参数,operator*有两个参数( r1 {0 R- ^# K! [
B.operator+有两个参数,operator*有一个参数9 ^( W; \$ {% U+ `. Y/ q M7 U- B
C.operator+有一个参数,operator*有两个参数( }8 O. {* N9 u, r# T' B0 {% l
D.operator+有一个参数,operator*有一个参数
* d: j$ u0 i5 A; Z$ ~资料:& c1 s$ k* i% h* P; r% O" v
; B4 `9 ?- B: O8 N- q* }( k23.假设A为抽象类,下列语句( )是正确的。
' [8 `# p$ ^4 g. D8 C% X3 zA.A fun(int);: n9 Q5 @( S( q. w0 H5 ?, H7 ~
B.A *p;
4 p v# c( q5 JC.int fun(A);
, q9 Q" V" ]' g! aD.A Obj;
: }/ z% O7 j8 B$ Z7 s4 V; G V, Y资料:
5 {- {7 U2 P1 C! v2 v" R# z
1 P5 }0 v2 N7 h/ t+ o24.在类定义的外部,可以被访问的成员有( )。
; s2 ?* Z; M$ _* |" AA.所有类成员
6 s! q- o9 a$ }* y y, UB.private或protected的类成员
" c2 v6 a) B" m4 t1 }; _! rC.public的类成员- B# B7 @2 G' E. b
D.public或private的类成员
/ C# n9 }4 @/ Y3 l7 o& r. w7 e资料:' ^. f+ D9 \' B" ?
3 d# [9 b9 l- y3 F
25.在一个string类对象表示的字符串中查找子串,应该使用string类的()函数。" L T; P$ i" u
A.assign
. p# M, v3 z3 [! VB.insert
2 q/ T, r4 H# t( YC.swap
" U* \ t4 \) K. j- I* M: ^% gD.find
5 ]) F3 K* e. ~! o4 h8 [资料:
3 V+ C+ E5 C* ~3 P- ?9 c- R
0 V/ F1 ~7 C5 K4 @. m1 `2 Y3 s26.下面叙述错误的是( )。
, T9 X, V0 A. o3 e! ^. AA.派生类可以使用private派生
6 j/ i2 I4 R: aB.对基类成员的访问必须是无二义性的
& e8 g s" b" b/ |7 y$ EC.基类成员的访问能力在派生类中维持不变
' t, M, F1 S- }, T! u/ nD.赋值兼容规则也适用于多继承的组合* U9 s; K. f# J& E* B( F& n
资料:: P- `4 v! Y0 Z' N+ h1 ]
8 p0 Y. }" L' O- O0 Z! ?+ l# `27.下列关于C++类的描述中错误的是( )。6 r4 c6 a4 H2 B
A.类与类之间可以通过一些手段进行通信和联络
7 i) L) D x4 o6 R, `8 Q/ TB.类用于描述事物的属性和对事物的操作! H( m6 p: p V$ L6 x
C.类与类之间必须是平等的关系,而不能组成层次关系: i% m5 {, r" O( Y @; I. _
D.类与类之间可以通过封装而具有明确的独立性: @1 ]* N, w8 {$ {' z a' M/ G
资料:
4 I0 J8 [& k- s) B
5 k; q- \5 }" E8 b- K6 W8 X( A28.下列程序中说明的公有成员是( ) class Location { int X; public: void init(int initX,int initY); private: int Y; public: int GetX(); int GetY(); };
- T' V0 n9 i- iA.X5 O8 c o1 t2 W2 v* \, w
B.init(int initX,int initY)1 m% V! [+ Z5 N7 u4 E/ a, f
C.GetX(),GetY()' y& K5 Q' c2 ~
D.B和C都是
+ H; i) [$ z- }& u3 i# K# C资料:, v. m/ e) h2 M) l6 \' f5 h' ~, I
8 ?, D( q8 a, t* N1 S/ g29.程序在调用重载函数时,根据()区分到底要调用哪个函数。4 \. y% `( }4 u, a( T
A.函数名; q' Y7 I5 A3 b' B) D L6 ^8 t
B.返回值类型3 z2 z/ S( }, D9 \+ F- r
C.参数个数和类型9 H6 [- L F" s3 `2 Y7 b3 P" Z5 d" ^
D.以上都可以
% y7 j Y0 {6 K5 F资料:
# ]9 X/ t) \2 j" Z
Z# F2 Y0 e7 J+ ?9 J+ x4 B, g2 z8 R30.类的默认的无参构造函数()。
3 l" ~8 Z X' w. xA.在任何情况下都存在, A7 X+ g! K: n. d: K" M
B.仅当未定义无参构造函数时存在- x9 f v0 g" ~ l! u- N. l, b( d
C.仅当未定义有参构造函数时存在
/ j. |6 J1 e0 [. ~; b4 ~% f3 mD.仅当未定义任何构造函数时存在
, i; s6 x5 }/ Z; d, U6 Y资料:; [7 [& c+ x& z8 `; D
4 n! u3 b% j5 U2 {: _7 U' V2 C. j31.通常拷贝构造函数的参数表是( )。
2 f* V" b% N: B7 a' iA.某个对象名4 |) y8 w4 M0 z3 q
B.某个对象的成员名8 Q! V7 D0 o# _8 ~+ ~" ~5 g
C.某个对象的引用名
/ ~6 ]2 B% c6 W2 @4 K* RD.某个对象的指针名
. ^, T8 J' c- A, z& Y: G资料:
4 Y% {+ D4 T& f6 @" P2 d$ d, Y, g4 }2 t/ B. M; K
32.在类的定义形式中,数据成员、成员函数和( )组成了类定义体。
: V+ H+ O$ A, m" @A.成员的访问控制信息
4 X8 C [" q# L9 c$ S7 qB.公有消息
. I- h4 Q# M$ \' @8 U; hC.私有消息
) j( f" a1 B0 F! K: m; yD.保护消息
& F9 b) c0 `. u. v% O4 m, u资料:( y x7 a$ T6 X0 R- d
. U/ y+ `' K/ `& f$ |( T& ]33.下列表示引用的方法中,( )是正确的。 已知:int k=1000;
+ W1 r: Q* e m2 @1 ~A.int &x=k;
! w5 g m1 e' ?& O+ I/ K" @B.char &y;5 X4 I+ ^6 ]) F; c* U
C.int &z=1000;1 G- u/ \: M" M5 i; N: A$ J% i& F$ i
D.float &t=&k;
1 Q$ W1 R% ?: u/ N9 C! i资料:( N' X, e$ e, K
, \0 i8 {: q7 |34.下列描述中,()是抽象类的特性。
, n K" K/ [# oA.可以说明虚函数: A: G. Z2 i8 E `# e+ O
B.可以定义友元函数
" X$ C# l: }1 G* nC.可以进行构造函数重载
& O$ W6 o6 L* Z$ uD.不能说明其对象- S$ l* `0 F% @0 N, H( F" x& D: y6 b# _
资料:, C4 n9 ^9 L) j. I
( k. v. c F9 t/ ], U& x% }0 M6 ^
35.下列关于虚函数的说明中,正确的是()。6 |/ I u& C/ r! I0 Q6 D8 @5 B
A.从虚基类继承的函数都是虚函数
7 E& N3 k2 E. K5 ~B.虚函数不得是静态成员函数: d) `$ r+ y% m
C.只能通过指针或引用调用虚函数
( Z& u0 w& p7 }& s8 M# |D.抽象类中的成员函数都是虚函数; m0 D( N; \0 q+ L* x! i
资料:
5 a3 ^. G+ x$ H( A/ d* t5 H2 s1 ~
6 n1 c: w, P% u9 f6 [9 ^二、资料来源:谋学网(www.mouxue.com) (共 15 道试题,共 30 分)7 [+ Z+ V, C F/ K1 W3 g$ [6 ?
36.编程是将所设计的算法转换成计算机能够运行的代码的过程。
1 g8 w, q$ L! l7 v, i$ k2 X资料:正确$ Q) S& w) V% c) Z3 Y4 C$ {3 n
& z* n* U! S7 a
37.在一个类中最多只能定义1个构造函数和1个析构函数。
( [" j9 o" Y+ L; F3 h资料:错误 Y% j+ l3 s* \) ~1 O
* t: E+ u# P, \3 |8 j
38.面向对象程序设计方法中也会使用结构化程序设计方法。# j+ a2 R" n6 D# F0 t2 |/ E
资料:正确
! c8 t5 k% ^8 S" E/ ?) @; i
* a$ J( d! \, F9 d6 ~% D' ?; N* {# z39.假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为~AB(){ }。
+ W# R' A1 P, f T* h& T; E资料:正确3 p: R; y- F5 V- p" @
" \' c/ \) S7 s, Y/ @
40.派生类至少有一个基类。# M5 D' J! Z( d& G# ]
资料:正确0 E* s& f5 H$ j) F! l+ f' ^# r
: N. b7 T( q9 b$ ]3 O( w41.要使语句"MyClass a;"能够编译通过,必须在定义MyClass类时编写无参构造函数。
" \) z7 q5 C; l! A# W1 X资料:错误1 N3 p/ o! r+ f' W9 U
& Y, T0 d2 W; ~$ p2 M% m r" O0 Z
42.定义重载函数时,应保证函数类型有所不同。
0 \* g) i, {3 U8 E3 S) o资料:错误: ?* F. r( E: {% z+ S5 D
5 l" h* l+ y( [1 ~8 V" n3 c! s7 E1 ^1 d
43.预定义的提取符和插入符是可以重载的。 Z, a X; d, p9 ~ o% }
资料:正确
% U0 v. _# }# J3 { u
' Y \9 [: `3 V; l( a44.对一个类中的数据成员的初始化,可以通过构造函数来实现。
; H; q' l( U1 f- |4 I资料:正确/ r, c: x% t5 L& a
! p6 W3 ^# Y# B# ~+ K: u4 t, x3 Z
45.函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。
8 r0 h( W) }" }% p+ Z( k: j资料:正确
7 |( d: D& s' n `* V8 @2 V
" u! ~6 }1 v7 f( i& L2 K5 |46.在派生类对象销毁时,系统除了会自动调用派生类的析构函数,还会自动调用基类的析构函数。4 n0 ^$ C( m, N) q. Q
资料:正确6 E. N7 j" s4 ~
, ^2 W4 w$ E0 {$ }
47.构造函数和析构函数均不能被说明为虚函数。" e3 g- z6 |; T K& |" K5 O5 a
资料:错误 J2 @" a& a8 D2 T& `' f) x1 Q5 {
7 O* i& S9 S9 w7 ?# k" a( {# P48.一个类的构造函数中可以不包含对其子对象的初始化。
( s! f# u. ?3 m9 L资料:错误/ g. p4 l) x, n
" X0 B( B s5 u: d- n) j7 k
49.类的静态成员函数中不能访问非静态成员。 c* ^- z! X9 G* ]8 U
资料:正确
: }' }* H9 ]3 s6 D
% c& L' k& s/ r2 e50.类中所提供的成员函数可以直接访问该类的私有成员。
$ C# k0 z$ C3 N6 t. ]- [资料:正确
! q- A! O1 ^4 I1 i; n- K) v4 l0 ~" O1 v4 ]4 w; J
' C7 D3 p) S6 N
* k7 s0 r( P" u h: F
" P: c2 ]& i' O \& s" M
8 s# C0 _$ w$ P, q8 k Y, M( R/ m7 `# u+ q3 l! O* y
, f! b2 R# f- U$ j! t9 K
5 d- f# x* P6 d' T. d* _3 [
3 L/ h9 e& p% q: s
& g8 l7 y! i7 a, n- m( x% |3 i, F8 p& g4 i! m4 {8 L) J1 k) ~8 f
3 j# b! y' s+ l3 v, N6 b, _
|
|