|
此为清华大学出版社陈维兴等人编写的《C++面向对象程序设计教程》习题答案,仅供学习参考; U6 k% v4 R; i- f! @9 @
停”、“选择”等,当人们使用洗衣机时,只要根据需要按下“选择(洗衣的方式)”“启动”或“暂
- O3 j) \6 o/ O" p停”等按键,洗衣机就会完成相应的工作。这些按键安装在洗衣机的表面,人们通过它们与# I- `( s/ \5 T, p1 k
洗衣机交流,告诉洗衣机应该做什么。我们无法(当然也没必要)操作洗衣机的内部电路和
/ e) V8 i& m7 l8 Q机械控制部件,因为它们被装在洗衣机里面,这对于用户来说是隐蔽的,不可见的。/ V' N" ]2 L! l2 O
1.6】什么是继承?请举例说明
2 V" q& Y; g4 E( Y* ^【解】继承所表达的是类之间的相关关系,这种关系使得某类对象可以继承另外一类
8 o' \) N# v! o+ I对象的特征和能力。现实生活中,继承是很普遍8 @0 `* T/ [; p. J9 r
汽车+ A& @& E O" e
和容易理解的。例如我们继承了我们父母的5 w4 O; E/ E, t' f
些特征,如种族、血型、眼睛的颜色等,父母是我
( Y+ ~8 z& r- O; P乘用车; e3 s+ ?1 ]7 u. g& x
待种车辆
2 X( C) Z* n% c+ ^, R1 i' s们所具有的属性的基础
# Q# }3 B9 s n: s- h: z: A9 h图1所示是一个继承的典型例子:汽车继[越野车][轿车[运动车[消防车
! m# d/ U* W+ N承的层次。
2 T1 K: v# {( H8 M6 S以面向对象程序设计的观点,继承所表达的
r+ T. |& W6 B! A4 Z0 t运动型多用途车
% m5 D- W+ d( ?; K3 X, X, z是类之间相关的关系。这种关系使得某一类可! o- M8 T! i U& O
以继承另外一个类的特征和能力。' T8 q) E+ c# E3 o5 b' u
图1.1
4 Z' s3 J c8 [9 W9 }3 K& F! E# ]【1.7】若类之间具有继承关系,则它们之间具有什么特征?
3 b o0 J! P7 A4 y; r1 k. u4 L$ p解】若类之间具有继承关系,则它们之间具有下列几个特性:% G7 w0 T( B0 H
(1)类间具有共享特征(包括数据和操作代码的共享);2 v3 K5 x8 Q+ l |" a
(2)类间具有差别或新增部分(包括非共享的数据和操作代码);
( q4 W" L! i; d$ ]6 x. l' q8 Q3 b3 ~(3)类间具有层次结构
6 P1 _; v9 V- k. p6 h. p% k2 Z/ |假设有两个类A和B,若类B继承类A,则类B包含了类A的特征(包括数据和操作),
* J ?5 d8 p, ~, D, q同时也可以加入自己所特有的新特性。这时,我们称被继承类A为基类或父类;而称继承/ O' E- G+ n; Y- o0 t) f
类B为A的派生类或子类。同时,我们还可以说,类B是从类A中派生出来的
1 l$ \8 y! Q: [* \: p' W* K【1.8】什么是单继承、多继承?请举例说明。, |3 G8 b) D5 I
【解】从继承源上分,继承分为单继承和多继承。
) o! {' Y2 s+ E6 l+ G/ \6 F( P4 Y" w单继承是指每个派生类只直接继承了一个基类的特征。图1.2表示了一种单继承关
; L5 {. h2 A; D* B系。它表示 Windows操作系统的窗口之间的继承关系。
' v5 G# o+ b6 W9 M- N多继承是指多个基类派生出一个派生类的继承关系。多继承的派生类直接继承了不止
! W. F4 P+ r, V+ y( Q个基类的特征。例如,小孩喜欢的玩具车即继承了车的一些特性,还继承了玩具的一些特
6 g) ~4 c$ |; t! G z+ q征。如图1.3所示。
$ [0 Z* k7 U% Q% Z窗口8 P A) V/ v$ }: m' c/ C% M
玩具0 b" H% o$ S, F& D4 N
编辑窗口」[对话窗口' N* D! E. S' ?/ W6 p; a
玩具车$ p) o/ i4 [. O; `
图1.2) |7 ^8 Z+ C9 S9 e5 j
图1.3
7 Z7 j- Y L* o. s【1.9】什么是多态性?请举例说明。8 N1 U. L/ q" y2 J( N( v" x# T
【解】面向对象系统的多态性是指不同的对象收到相同的消息时执行不同的操作。例- g3 ~2 z& Q6 _) F/ q- f( c
) f8 B7 }( q) k. @如,有一个窗口( Window)类对象,还有一个棋子( Piece)类对象,当我们对它们发出“移动”
, z" [& a/ ]7 H$ h的消息时,“移动”操作在 Window类对象和Pece类对象上可以有不同的行为1 L( ]' ^: }% ?' w* N. @
C艹+语言支持两种多态性,即编译时的多态性和运行时的多态性。编译时的多态性是+ G/ N& ]( u7 i/ W: @; J
通过函数重载(包括运算符重载)来实现的,运行时的多态性是通过虚函数来实现的。
( V' }. g) D* K0 [) R【1.10】面向对象程序设计的主要优点是什么? d, i* ?5 ?; h/ N8 ?
【解】面向对象程序设计本质上改变了人们以往设计软件的思维方式,从而使程序设
$ v/ T" y X7 _/ V4 Z3 t8 w计者摆脱了具体的数据格式和过程的束缚,将精力集中于要处理对象的设计和研究上,极大
& ]$ R5 x5 L) @ T" ?1 r4 C地减少了软件开发的复杂性,提高了软件开发的效率。面向对象程序设计主要具有以下
5 n& \; i7 w- w- M j" f, e优点:
% ?2 s4 T/ S7 f(1)可提高程序的重用性;1 v( r! ^, f# p9 |
(2)可控制程序的复杂性;; c; ?( w. x* B, R; a& C+ V: K( S
(3)可改善程序的可维护性;- T' S2 p% G, I0 j! H7 b- n+ H
(4)能够更好地支持大型程序设计;
9 ^9 y! w+ R! E* p( V1 ]$ x! a; b4 C(5)增强了计算机处理信息的范围;& ]2 v9 ], r! f2 ]2 {
(6)能很好地适应新的硬件环境1 l4 ^4 b" T+ @* A
面向对象程序设计是目前解决软件开发面临难题的最有希望、最有前途的方法之
- x; M) H# L( P: Q! @! o
1 E9 T$ c* D7 J; |第2章C++概述
/ t6 T" Z3 \# K【2.1】简述C++的主要特点4 q4 H) v* v% S9 a- O
【解】C++语言的主要特点表现在两个方面,一是全面兼容C,并对C的功能作了不少
7 T. Z- S8 k% v- a( O+ A扩充,二是增加了面向对象的机制,具体表现为, K! J$ c1 K. v
(1)C艹是C的超集,C++保持与C的兼容,这就使许多C代码不经修改就可以为
, V2 N) f! ~4 u- t/ D+ eC+所用,用C编写的众多的库函数和实用软件可以用于C+中。7 m* \% J! @0 n- y; W1 }! w$ @
2)C艹是一个更好的C,它保持了C的简洁、高效和接近汇编语言等特点,并对C的( r" G3 t) r, [6 S
功能作了不少扩充。用C艹编写的程序比C更安全,可读性更好,代码结构更为合理,C++! K5 l4 @: H5 k% |# J2 T c9 c
的编译系统能够检查出更多的类型错误
7 i! P( p4 B( |/ [(3)用C++编写的程序质量高,从开发时间、费用到形成的软件的可重用性、可扩
* K" R0 o w( u( Q$ h( v# R# J充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发变得更加 b+ d# d2 K2 m A3 `
容易。* c9 N& `# e, u* R( g' P
(4)增加了面向对象的机制,几乎支持所有的面问对象程序设计特征,体现了近20年% z' d, \' e7 m6 g: x6 w% L
来在程序设计和软件开发领域出现的新思想和新技术,这主要包括
Q# k6 j4 o& p9 `7 g①抽象数据类型;
& Y2 j& Z5 J" E/ W" C& N( p; R②封装与信息隐藏;1 j2 p. h1 e- h7 ]# ^
③以继承方式实现程序的重用; l9 c7 i; o' r) o0 I" ~. F: M
④以函数重载、运算符重载和虚函数来实现多态性;
5 j0 l1 c- K3 f0 ~7 A1 M⑤以模板来实现类型的参数化
, u2 x) F' h7 g3 QC++语言最有意义的方面是支持面向对象的特征,然而由于C+与C保持兼容,使得
1 @0 e9 }7 v( x8 t; I; Q+ ]C++不是一个纯正的面向对象的语言,C++既可用于面向过程的结构化程序设计,也可用
- Y8 ~0 \( n2 c1 u' E; r' y于面向对象的程序设计。
$ R# f2 I: ~9 |% {【2.2】下面是一个C程序,改写它,使它采用C+风格的I/O语句。
$ }; J" P% b' u! ~. n+ R" k4 ?#include< stdio. h>) L( C" a; G$ A, s
int main()
" _- u6 |, Y0 z o+ v: R' V/ FI int a, b, d, min;
4 h0 J8 j3 y5 [' a! Cprintf("Enter two numbers: )7
% K$ ?4 Q6 ~6 e2 ~+ I! c" Bscanf("8d%d",&a,&b)i
! u- S1 _% T2 O, E, xmin=a>b?b: a
3 J! o* @: u, l. C" k, W+ x) i% vfor(d=2; d |
|