名称: C++编程思想第二版第二卷 作者信息: 作者: Bruce Eckel [ 英文 pdf ]
简单介绍
First Edition Winner 1996 Jolt Award for Best Book of the Year. Learn practical programming and best practices. Meet the difficult challenges of C++ development. Build reliable and robust programs. Design Patterns chapter shows sophisticated use of objects, composition and polymorphism. Provides a gentle introduction to multithreaded programming, a feature being considered for the next version of Standard C++. Defensive Programming chapter includes a simple unit-testing framework and debugging techniques. In-depth treatment of Standard C++ Library facilities including strings, iostreams, and the “STL” algorithms and containers. Modern usage of templates, including template metaprogramming. Unravels the perplexities of multiple inheritance. Shows practical uses for RTTI. Explores exception handling in depth and clearly explains exception-safe design. Compliant with the official ISO C++ Standard. Presents results of current research being considered for inclusion in the next revision of Standard C++. All code examples freely downloadable, tested on multiple platforms and compilers including the free GNU C++ compiler on Windows/Mac/Linux.
Preface 13 What’s new in the second edition13 What’s in Volume 2 of this book ……14 How to get Volume 2 ……………………14 Prerequisites…………………………. 14 Learning C++……………………….. 14 Goals …………………………………… 16 Chapters ………………………………. 17 Exercises ……………………………… 18 Exercise solutions ………………………..18 Source code………………………….. 18 Language standards……………….. 20 Language support…………………………20 The book’s CD ROM …………….. 20 Seminars, CD Roms & consulting20 Errors ………………………………….. 21 Acknowledgements……………….. 21 Part 1: The Standard C++ Library 23 Library overview…………………… 24 1: Strings 27 What’s in a string ………………….. 27 Creating and initializing C++ strings 29 Operating on strings………………. 31 Appending, inserting and concatenating strings 32 Replacing string characters ……………34 Concatenation using non-member overloaded operators Searching in strings……………….. 38 Finding in reverse…………………………43 Finding first/last of a set………………..44 Removing characters from strings…..45 Comparing strings ………………………..49 Using iterators……………………………..53 37 Strings and character traits …………….55 A string application……………….. 58 Summary……………………………… 61 Exercises ……………………………… 62 2: Iostreams 63 Why iostreams?…………………….. 63 True wrapping……………………………..65 Iostreams to the rescue…………… 67 Sneak preview of operator overloading68 Inserters and extractors …………………69 Common usage…………………………….70 Line-oriented input……………………….72 File iostreams……………………….. 74 Open modes ………………………………..76 Iostream buffering…………………. 76 Using get( ) with a streambuf…………78 Seeking in iostreams ……………… 78 Creating read/write files ………………..80 stringstreams ………………………… 81 strstreams …………………………….. 81 User-allocated storage…………………..81 Automatic storage allocation………….84 Output stream formatting ……….. 87 Internal formatting data…………………88 An exhaustive example …………………92 Formatting manipulators………… 95 Manipulators with arguments…………96 Creating manipulators……………. 99 Effectors……………………………………100 Iostream examples ………………. 102 Code generation …………………………102 A simple datalogger ……………………110 Counting editor ………………………….117 Breaking up big files …………………..118 Summary……………………………. 120 Exercises ……………………………. 120 3: Templates in depth 121 Nontype template arguments … 121 Default template arguments ….. 122 The typename keyword………… 122 Typedefing a typename ……………….124 Using typename instead of class ….124 Function templates ………………. 124 A string conversion system ………….125 A memory allocation system………..126 Type induction in function templates 129 Taking the address of a generated function template Chapter 2: Hiding the Implementation 130 7 Local classes in templates …….. 131 Applying a function to an STL sequence Template-templates ……………… 134 Member function templates ….. 135 131 Why virtual member template functions are disallowed Nested template classes……………….137 137 Template specializations ………. 137 Full specialization ………………………137 Partial Specialization…………………..137 A practical example ……………………137 Design & efficiency ……………………141 Preventing template bloat…………….141 Explicit instantiation ……………. 143 Explicit specification of template functions 144 Controlling template instantiation144 The inclusion vs. separation models145 The export keyword ……………………145 Template programming idioms 145 The “curiously-recurring template”.145 Traits………………………………………..145 Summary……………………………. 145 4: STL Containers & Iterators147 Containers and iterators ……….. 147 STL reference documentation ………149 The Standard Template Library 149 The basic concepts ………………. 151 Containers of strings ……………. 155 Inheriting from STL containers 157 A plethora of iterators ………….. 159 Iterators in reversible containers …..161 Iterator categories……………………….162 Predefined iterators …………………….163 Basic sequences: vector, list & deque 169 Basic sequence operations……………169 vector ………………………………… 172 Cost of overflowing allocated storage173 Inserting and erasing elements ……..177 deque…………………………………. 179 Converting between sequences …….181 Cost of overflowing allocated storage182 Checked random-access ………………184 list …………………………………….. 185 Special list operations …………………187 Swapping all basic sequences……….191 Robustness of lists………………………192 Performance comparison ……… 193 set……………………………………… 198 Eliminating strtok( ) …………………..199 StreamTokenizer: a more flexible solution Chapter 2: Hiding the Implementation 201 8 A completely reusable tokenizer …..203 stack ………………………………….. 208 queue…………………………………. 211 Priority queues ……………………. 216 Holding bits………………………… 226 bitset ………………………………….226 vector…………………………….230 Associative containers …………. 232 Generators and fillers for associative containers The magic of maps……………………..239 Multimaps and duplicate keys ………244 Multisets …………………………………..247 236 Combining STL containers …… 250 Cleaning up containers of pointers253 Creating your own containers .. 255 Freely-available STL extensions257 Summary……………………………. 259 Exercises ……………………………. 260 5: STL Algorithms 263 Function objects………………….. 263 Classification of function objects ….264 Automatic creation of function objects265 SGI extensions …………………………..279 A catalog of STL algorithms…. 285 Support tools for example creation..287 Filling & generating ……………………291 Counting …………………………………..293 Manipulating sequences ………………294 Searching & replacing…………………299 Comparing ranges ………………………305 Removing elements…………………….308 Sorting and operations on sorted ranges311 Heap operations …………………………322 Applying an operation to each element in a range 323 Numeric algorithms…………………….331 General utilities………………………….334 Creating your own STL-style algorithms Summary……………………………. 337 Exercises ……………………………. 337 Part 2: Advanced Topics 341 6: Multiple inheritance 336 342 Perspective …………………………. 342 Duplicate subobjects ……………. 344 Ambiguous upcasting…………… 345 virtual base classes……………… 346 Chapter 2: Hiding the Implementation 9 The “most derived” class and virtual base initialization “Tying off” virtual bases with a default constructor 349 348 Overhead……………………………. 351 Upcasting …………………………… 352 Persistence ………………………………..355 Avoiding MI……………………….. 362 Repairing an interface ………….. 362 Summary……………………………. 367 Exercises ……………………………. 368 7: Exception handling 369 Error handling in C ……………… 369 Throwing an exception ………… 372 Catching an exception………….. 373 The try block …………………………….373 Exception handlers……………………..373 The exception specification………….374 Better exception specifications?……377 Catching any exception ……………….377 Rethrowing an exception……………..378 Uncaught exceptions …………………..378 Function-level try blocks……………..380 Cleaning up ………………………… 380 Constructors ……………………….. 384 Making everything an object………..386 Exception matching …………….. 388 Standard exceptions …………….. 390 Programming with exceptions . 391 When to avoid exceptions ……………391 Typical uses of exceptions …………..392 Overhead……………………………. 396 Summary……………………………. 397 Exercises ……………………………. 397 8: Run-time type identification399 The “Shape” example ………….. 399 What is RTTI?…………………….. 400 Two syntaxes for RTTI ……………….400 Syntax specifics ………………….. 404 typeid( ) with built-in types …………404 Producing the proper type name……405 Nonpolymorphic types ………………..405 Casting to intermediate levels ………406 void pointers ……………………………..408 Using RTTI with templates ………….408 References………………………….. 409 Exceptions…………………………………410 Multiple inheritance …………….. 411 Chapter 2: Hiding the Implementation 10 Sensible uses for RTTI…………. 412 Revisiting the trash recycler …………413 Mechanism & overhead of RTTI416 Creating your own RTTI………. 416 Explicit cast syntax ……………… 420 Summary……………………………. 421 Exercises ……………………………. 422 9: Building stable systems 423 Shared objects & reference counting 423 Reference-counted class hierarchies423 The canonical object & singly-rooted hierarchies 423 An extended canonical form…………424 Design by contract ………………. 424 Integrated unit testing ………….. 424 Dynamic aggregation …………… 424 Exercises ……………………………. 428 10: Design patterns 429 The pattern concept……………… 429 The singleton……………………………..430 Classifying patterns……………… 434 Features, idioms, patterns…………….435 Basic complexity hiding………………435 Factories: encapsulating object creation 436 Polymorphic factories …………………438 Abstract factories ……………………….441 Virtual constructors…………………….444 Callbacks……………………………. 449 Functor/Command ……………………..450 Strategy …………………………………….450 Observer……………………………………450 Multiple dispatching ……………. 459 Visitor, a type of multiple dispatching463 Efficiency…………………………… 466 Flyweight ………………………………….466 The composite…………………….. 466 Evolving a design: the trash recycler Improving the design …………… 471 466 “Make more objects”…………………..471 A pattern for prototyping creation…476 Abstracting usage………………… 488 Applying double dispatching … 492 Implementing the double dispatch…492 Applying the visitor pattern ….. 497 RTTI considered harmful? ……. 503 Summary……………………………. 506 Chapter 2: Hiding the Implementation 11 Exercises ……………………………. 507 11: Tools & topics 509 The code extractor ………………. 509 Debugging………………………….. 531 assert( )…………………………………….531 Trace macros……………………………..531 Trace file …………………………………..532 Abstract base class for debugging …533 Tracking new/delete & malloc/free533 CGI programming in C++…….. 539 Encoding data for CGI ………………..540 The CGI parser…………………………..541 Using POST ………………………………548 Handling mailing lists …………………549 A general information-extraction CGI program Parsing the data files …………………..566 560 Summary……………………………. 573 Exercises ……………………………. 573 A: Recommended reading 575 C……………………………………….. 575 General C++……………………….. 575 My own list of books…………………..576 Depth & dark corners…………… 576 The STL …………………………….. 576 Design Patterns …………………… 576 B:Compiler specifics 577 Index 580