C++沉思录(英文版)

C++沉思录(英文版)
作 者: Andrew Koenig Barbara Moo凯尼格
出版社: 人民邮电出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: C C++ C# VC VC++ 程序设计 计算机/网络
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  AndrewKoenig是AT&T大规模程序研发部(前贝尔实验室)成员。他从1986年开始从事C语言的研究,1977年加入贝尔实验室。他编写了一些早期的类库,并在1988年组织召开了第一个具有相当规模的C++会议。在ISO/ANSIC++委员会成立的1989年,他就加入了该委员会,并一直担任项目编辑。

内容简介

《C++沉思录(英文版)》基于作者在知名技术杂志发表的技术文章、世界各地发表的演讲以及斯坦福大学的课程讲义整理、写作而成,融聚了作者10多年C++程序生涯的真知灼见。全书分为6篇32章,分别对C++语言的历史和特点、类和继承、STL与泛型编程、库的设计等几大技术话题进行了详细而深入的讨论,细微之处几乎涵盖了C++所有的设计思想和技术细节。全书通过精心挑选的实例,向读者传达先进的程序设计的方法和理念。《C++沉思录(英文版)》适合有一定经验的C++程序员阅读学习,可以帮助读者加强提高技术能力,成为C++程序设计的高手。

图书目录

chapter 0 prelude

0.1 first try

0.2 doing it without classes

0.3 why was it easier in c++?

0.4 a bigger example

0.5 conclusion

part i motivation

chapter 1 why i use c++

1.1 the problem

1.2 history and context

1.3 automatic software distribution

1.4 enter c++

1.5 recycled software

1.6 postscript

chapter 2 why i work on c++

2.1 the success of small projects

2.2 abstraction

2.3 machines should work for people

chapter 3 living in the real world

part ii classes and inheritance

chapter 4 checklist for class authors

chapter 5 surrogate classes

5.1 the problem

5.2 the classical solution

5.3 virtual copy functions

5.4 defining a surrogate class

5.5 summary

chapter 6 handles: part 1

6.1 the problem

6.2 a simple class

6.3 attaching a handle

6.4 getting at the object

6.5 simple implementation

6.6 use-counted handles

6.7 copy on write

6.8 discussion

chapter 7 handles: part 2

7.1 review

7.2 separating the use count

7.3 abstraction of use counts

7.4 access functions and copy on write

7.5 discussion

chapter 8 an object-oriented program

8.1 the problem

8.2 an object-oriented solution

8.3 handle classes

8.4 extension 1: new operations

8.5 extension 2: new node types

8.6 reflections

chapter 9 analysis of a classroom exercise: part 1

9.1 the problem

9.2 designing the interface

9.3 a few loose ends

9.4 testing the interface

9.5 strategy

9.6 tactics

9.7 combining pictures

9.8 conclusion

chapter 10 analysis of a classroom exercise: part 2

10.1 strategy

10.2 exploiting the structure

10.3 conclusion

chapter 11 when not to use virtual functions

11.1 the case for

11.2 the case against

11.3 destructors are special ,

11.4 summary

part iii templates

chapter 12 designing a container class

12.1 what does it contain?

12.2 what does copying the container mean?

12.3 how do you get at container elements?

12.4 how do you distinguish reading from writing?

12.5 how do you handle container growth?

12.6 what operations does the container provide?

12.7 what do you assume about the container element type?

12.8 containers and inheritance

12.9 designing an arraylike class

chapter 13 accessing container elements

13.1 imitating a pointer

13.2 getting at the data

13.3 remaining problems

13.4 pointer to const array

13.5 useful additions

chapter 14 iterators

14.1 completing the pointer class

14.2 what is an iterator?

14.3 deleting an element

14.4 deleting the container

14.5 other design considerations

14.6 discussion

chapter 15 sequences

15.1 the state of the art

15.2 a radical old idea

15.3 well, maybe a few extras...

15.4 example of use

15.5 maybe a few more...

15.6 food for thought

chapter 16 templates as interfaces

16.1 the problem

16.2 the first example

16.3 separating the iteration

16.4 iterating over arbitrary types

16.5 adding other types

16.6 abstracting the storage technique

16.7 the proof of the pudding

16.8 summary

chapter 17 templates and generic algorithms

17.1 a specificexample

17.2 generalizing the element type

17.3 postponing the count

17.4 address independence

17.5 searching a nonarray

17.6 discussion

chapter 18 generic iterators

18.1 a different algorithm

18.2 categories of requirements

18.3 input iterators

18.4 output iterators

18.5 forward iterators

18.6 bidirectional iterators

18.7 random-access iterators

18.8 inheritance?

18.9 performance

18.10 summary

chapter 19 using generic iterators

19.1 iterator types

19.2 virtual sequences

19.3 an output-stream iterator

19.4 an input-stream iterator

19.5 discussion

chapter 20 iterator adaptors

20.1 an example

20.2 directional asymmetry

20.3 consistency and asymmetry

20.4 automatic reversal

20.5 discussion

chapter 21 function objects

21.1 an example

21.2 function pointers

21.3 function objects

21.4 function-object templates

21.5 hiding intermediate types

21.6 one type covers many

21.7 implementation

21.8 discussion

chapter 22 function adaptors

22.1 why function objects?

22.2 function objects for built-in operators

22.3 binders

22.4 a closer look

22.5 interface inheritance

22.6 using these classes

22.7 discussion

part iv libraries

chapter 23 libraries in everyday use

23.1 the problem

23.2 understanding the problem--part 1

23.3 implementation—part 1

23.4 understanding the problem--part 2

23.5 implementation--part 2

23.6 discussion

chapter 24 an object lesson in library-interface design

24.1 complications

24.2 improving the interface

24.3 taking stock

24.4 writing the code

24.5 conclusion

chapter 25 library design is language design

25.1 character strings

25.2 memory exhaustion

25.3 copying

25.4 hiding the implementation

25.5 default constructor

25.6 other operations

25.7 substrings

25.8 conclusion

chapter 26 language design is library design

26.1 abstract data types

26.2 libraries and abstract data types

26.3 memory allocation

26.4 memberwise assignment and initialization

26.5 exception handling

26.6 summary

part v technique

chapter 27 classes that keep track of themselves

27.1 design of a trace class

27.2 creating dead code

27.3 generating audit trails for objects

27.4 verifying container behavior

27.5 summary

chapter 28 allocating objects in clusters

28.1 the problem

28.2 designing the solution

28.3 implementation

28.4 enter inheritance

28.5 summary

chapter 29 applicators, manipulators, and function objects

29.1 the problem

29.2 a solution

29.3 a different solution

29.4 multiple arguments

29.5 an example

29.6 abbreviations

29.7 musings

29.8 historical notes, references, and acknowledgments

chapter 30 decoupling application libraries from input-output

30.1 the problem

30.2 solution 1: trickery and brute force

30.3 solution 2: abstract output

30.4 solution 3: trickery without brute force

30.5 remarks

part vi wrapup

chapter 31 simplicity through complexity

31.1 the world is complicated

31.2 complexity becomes hidden

31.3 computers are no different

31.4 computers solve real problems

31.5 class libraries and language semantics

31.6 making things easy is hard

31.7 abstraction and interface

31.8 conservation of complexity

chapter 32 what do you do after you say rello world?

32.1 find the local experts

32.2 pick a tool kit and become comfortable with it

32.3 some parts of c are essential...

32.4 ... but others are not

32.5 set yourself a series of problems

32.6 conclusion

index