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