<p>Preface ix</p> <p><strong>Chapter 0: Notes to the Reader 1</strong><br>0.1 The structure of this book 2<br>0.2 A philosophy of teaching and learning 5<br>0.3 ISO standard C++ 8<br>0.4 PPP support 11<br>0.5 Author biography 13<br>0.6 Bibliography 13</p> <p><strong>Part I: The Basics</strong></p> <p><strong>Chapter 1: Hello, World! 17</strong><br>1.1 Programs 18<br>1.2 The classic first program 18<br>1.3 Compilation 21<br>1.4 Linking 23<br>1.5 Programming environments 24</p> <p><strong>Chapter 2: Objects, Types, and Values 29</strong><br>2.1 Input 30<br>2.2 Variables 32<br>2.3 Input and type 33<br>2.4 Operations and operators 34<br>2.5 Assignment and initialization 36<br>2.6 Names 40<br>2.7 Types and objects 42<br>2.8 Type safety 43<br>2.9 Conversions 44<br>2.10 Type deduction: auto 46</p> <p><strong>Chapter 3 Computation 51</strong><br>3.1 Computation 52<br>3.2 Objectives and tools 53<br>3.3 Expressions 55<br>3.4 Statements 58<br>3.5 Functions 68<br>3.6 vector 71<br>3.7 Language features 77</p> <p><strong>Chapter 4: Errors! 83</strong><br>4.1 Introduction 84<br>4.2 Sources of errors 85<br>4.3 Compile-time errors 86<br>4.4 Link-time errors 88<br>4.5 Run-time errors 89<br>4.6 Exceptions 94<br>4.7 Avoiding and finding errors 99</p> <p><strong>Chapter 5: Writing a Program 115</strong><br>5.1 A problem 116<br>5.2 Thinking about the problem 116<br>5.3 Back to the calculator! 119<br>5.4 Back to the drawing board 126<br>5.5 Turning a grammar into code 130<br>5.6 Trying the first version 136<br>5.7 Trying the second version 140<br>5.8 Token streams 142<br>5.9 Program structure 146</p> <p><strong>Chapter 6: Completing a Program 151</strong><br>6.1 Introduction 152<br>6.2 Input and output 152<br>6.3 Error handling 154<br>6.4 Negative numbers 156<br>6.5 Remainder: % 157<br>6.6 Cleaning up the code 158<br>6.7 Recovering from errors164<br>6.8 Variables 167</p> <p><strong>Chapter 7: Technicalities: Functions, etc. 179</strong><br>7.1 Technicalities 180<br>7.2 Declarations and definitions 181<br>7.3 Scope 186<br>7.4 Function call and return 190<br>7.5 Order of evaluation 206<br>7.6 Namespaces 209<br>7.7 Modules and headers 211</p> <p><strong>Chapter 8: Technicalities: Classes, etc. 221</strong><br>8.1 User-defined types 222<br>8.2 Classes and members 223<br>8.3 Interface and implementation 223<br>8.4 Evolving a class: Date 225<br>8.5 Enumerations 233<br>8.6 Operator overloading 236<br>8.7 Class interfaces 237</p> <p><strong>Part II: Input and Output</strong></p> <p><strong>Chapter 9: Input and Output Streams 251</strong><br>9.1 Input and output 252<br>9.2 The I/O stream model 253<br>9.3 Files 254<br>9.4 I/O error handling 258<br>9.5 Reading a single value 261<br>9.6 User-defined output operators 266<br>9.7 User-defined input operators 266<br>9.8 A standard input loop 267<br>9.9 Reading a structured file 269<br>9.10 Formatting 276<br>9.11 String streams 283</p> <p><strong>Chapter 10: A Display Model 289</strong><br>10.1 Why graphics? 290<br>10.2 A display model 290<br>10.3 A first example 292<br>10.4 Using a GUI library 295<br>10.5 Coordinates 296<br>10.6 Shapes 297<br>10.7 Using Shape primitives297<br>10.8 Getting the first example to run 309</p> <p><strong>Chapter 11: Graphics Classes 315</strong><br>11.1 Overview of graphics classes 316<br>11.2 Point and Line 317<br>11.3 Lines 320<br>11.4 Color 323<br>11.5 Line_style 325<br>11.6 Polylines 328<br>11.7 Closed shapes 333<br>11.8 Text 346<br>11.9 Mark 348<br>11.10 Image 350</p> <p><strong>Chapter 12: Class Design 355</strong><br>12.1 Design principles 356<br>12.2 Shape 360<br>12.3 Base and derived classes 367<br>12.4 Other Shape functions 375<br>12.5 Benefits of object-oriented programming 376</p> <p><strong>Chapter 13: Graphing Functions and Data 381</strong><br>13.1 Introduction 382<br>13.2 Graphing simple functions 382<br>13.3 Function 386<br>13.4 Axis 390<br>13.5 Approximation 392<br>13.6 Graphing data 397</p> <p><strong>Chapter 14: Graphical User Interfaces 409</strong><br>14.1 User-interface alternatives 410<br>14.2 The “Next” button 411<br>14.3 A simple window 412<br>14.4 Button and other Widgets 414<br>14.5 An example: drawing lines 419<br>14.6 Simple animation 426<br>14.7 Debugging GUI code 427</p> <p><strong>Part III: Data and Algorithms</strong></p> <p><strong>Chapter 15: Vector and Free Store 435</strong><br>15.1 Introduction 436<br>15.2 vector basics 437<br>15.3 Memory, addresses, and pointers 439<br>15.4 Free store and pointers 442<br>15.5 Destructors 447<br>15.6 Access to elements 451<br>15.7 An example: lists 452<br>15.8 The this pointer 456</p> <p><strong>Chapter 16: Arrays, Pointers, and References 463</strong><br>16.1 Arrays 464<br>16.2 Pointers and references468<br>16.3 C-style strings 471<br>16.4 Alternatives to pointer use 472<br>16.5 An example: palindromes 475</p> <p><strong>Chapter 17: Essential Operations 483</strong><br>17.1 Introduction 484<br>17.2 Access to elements 484<br>17.3 List initialization 486<br>17.4 Copying and moving 488<br>17.5 Essential operations 495<br>17.6 Other useful operations500<br>17.7 Remaining Vector problems 502<br>17.8 Changing size 504<br>17.9 Our Vector so far 509</p> <p><strong>Chapter 18: Templates and Exceptions 513</strong><br>18.1 Templates 514<br>18.2 Generalizing Vector 522<br>18.3 Range checking and exceptions 525<br>18.4 Resources and exceptions 529<br>18.5 Resource-management pointers 537</p> <p><strong>Chapter 19: Containers and Iterators 545</strong><br>19.1 Storing and processing data 546<br>19.2 Sequences and iterators552<br>19.3 Linked lists 555<br>19.4 Generalizing Vector yet again 560<br>19.5 An example: a simple text editor 566<br>19.6 vector, list, and string 572</p> <p><strong>Chapter 20: Maps and Sets 577</strong><br>20.1 Associative containers 578<br>20.2 map 578<br>20.3 unordered_map 585<br>20.4 Timing 586<br>20.5 set 589<br>20.6 Container overview 591<br>20.7 Ranges and iterators 597</p> <p><strong>Chapter 21: Algorithms 603</strong><br>21.1 Standard-library algorithms 604<br>21.2 Function objects 610<br>21.3 Numerical algorithms 614<br>21.4 Copying 619<br>21.5 Sorting and searching 620</p> <p>Index 625</p>