SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
Register your product to gain access to bonus material or receive a coupon.
* This is the first time a computer scientist of this stature has written an introductory programminng text.
* Not a traditional CS101 text. It leaves out many common topics, such as discrete math and hardware, and is completely about programming and how to develop software.
* Incorporates an approach that is "depth-first", "concrete-first", and "concept-based."
* Contains a full range of supplements, including an instructor’s guide, lecture slides, selected exercise solutions, and C++ glossary. The supplemental material is all posted on the author's site: http://www.stroustrup.com/Programming/
* Developed in the author's introductory programming course at Texas A&M, and has been used successfully on hundreds of students.
An Introduction to Programming by the Inventor of C++
Preparation for Programming in the Real World
The book assumes that you aim eventually to write non-trivial programs, whether for work in software development or in some other technical field.
Focus on Fundamental Concepts and Techniques
The book explains fundamental concepts and techniques in greater depth than traditional introductions. This approach will give you a solid foundation for writing useful, correct, maintainable, and efficient code.
Programming with Today’s C++
The book is an introduction to programming in general, including object-oriented programming and generic programming. It is also a solid introduction to the C++ programming language, one of the most widely used languages for real-world software. The book presents modern C++ programming techniques from the start, introducing the C++ standard library to simplify programming tasks.
For Beginners–And Anyone Who Wants to Learn Something New
The book is primarily designed for people who have never programmed before, and it has been tested with more than 1,000 first-year university students. However, practitioners and advanced students will gain new insight and guidance by seeing how a recognized master approaches the elements of his art.
Provides a Broad View
The first half of the book covers a wide range of essential concepts, design and programming techniques, language features, and libraries. Those will enable you to write programs involving input, output, computation, and simple graphics. The second half explores more specialized topics, such as text processing and testing, and provides abundant reference material. Source code and support supplements are available from the author’s website.
An Interview with C++ Creator Bjarne Stroustrup
Bjarne Stroustrup and Herb Sutter on the Future of C++: Part 1: Video Podcast Transcript
Bjarne Stroustrup and Herb Sutter on the Future of C++: Part 2: Video Podcast Transcript
Design and Evolution of C++: Video Podcast Transcript
High-Performance Applications with C++: Video Podcast Transcript
Please visit www.stroustrup.com/Programming/ for further support.
Preface to Bjarne Stroustrup's Programming: Principles and Practice Using C++
Preface xxiii
Chapter 0: Notes to the Reader 1
0.1 The structure of this book 2
0.2 A philosophy of teaching and learning 6
0.3 Programming and computer science 12
0.4 Creativity and problem solving 12
0.5 Request for feedback 12
0.6 References 13
0.7 Biographies 14
Chapter 1: Computers, People, and Programming 17
1.1 Introduction 18
1.2 Software 19
1.3 People 21
1.4 Computer science 24
1.5 Computers are everywhere 25
1.6 Ideals for programmers 34
Part I: The Basics 41
Chapter 2: Hello,World! 43
2.1 Programs 44
2.2 The classic first program 45
2.3 Compilation 47
2.4 Linking 51
2.5 Programming environments 52
Chapter 3: Objects, Types, and Values 59
3.1 Input 60
3.2 Variables 62
3.3 Input and type 64
3.4 Operations and operators 66
3.5 Assignment and initialization 69
3.6 Composite assignment operators 73
3.7 Names 74
3.8 Types and objects 77
3.9 Type safety 78
Chapter 4: Computation 89
4.1 Computation 90
4.2 Objectives and tools 92
4.3 Expressions 94
4.4 Statements 99
4.5 Functions 112
4.6 Vector 116
4.7 Language features 123
Chapter 5: Errors 131
5.1 Introduction 132
5.2 Sources of errors 134
5.3 Compile-time errors 134
5.4 Link-time errors 137
5.5 Run-time errors 138
5.6 Exceptions 144
5.7 Logic errors 152
5.8 Estimation 155
5.9 Debugging 156
5.10 Pre- and post-conditions 161
5.11 Testing 164
Chapter 6: Writing a Program 171
6.1 A problem 172
6.2 Thinking about the problem 173
6.3 Back to the calculator! 176
6.4 Grammars 186
6.5 Turning a grammar into code 193
6.6 Trying the first version 201
6.7 Trying the second version 206
6.8 Token streams 207
6.9 Program structure 213
Chapter 7: Completing a Program 219
7.1 Introduction 220
7.2 Input and output 220
7.3 Error handling 222
7.4 Negative numbers 227
7.5 Remainder: % 228
7.6 Cleaning up the code 231
7.7 Recovering from errors 238
7.8 Variables 241
Chapter 8: Technicalities: Functions, etc. 253
8.1 Technicalities 254
8.2 Declarations and definitions 255
8.3 Header files 261
8.4 Scope 264
8.5 Function call and return 269
8.6 Order of evaluation 287
8.7 Namespaces 290
Chapter 9: Technicalities: Classes, etc. 299
9.1 User-defined types 300
9.2 Classes and members 301
9.3 Interface and implementation 302
9.4 Evolving a class 304
9.5 Enumerations 314
9.6 Operator overloading 316
9.7 Class interfaces 318
9.8 The Date class 328
Part II: Input and Output 337
Chapter 10: Input and Output Streams 339
10.1 Input and output 340
10.2 The I/O stream model 341
10.3 Files 343
10.4 Opening a file 344
10.5 Reading and writing a file 346
10.6 I/O error handling 348
10.7 Reading a single value 352
10.8 User-defined output operators 357
10.9 User-defined input operators 359
10.10 A standard input loop 359
10.11 Reading a structured file 361
Chapter 11: Customizing Input and Output 375
11.1 Regularity and irregularity 376
11.2 Output formatting 376
11.3 File opening and positioning 384
11.4 String streams 390
11.5 Line-oriented input 391
11.6 Character classification 392
11.7 Using nonstandard separators 394
11.8 And there is so much more 401
Chapter 12: A Display Model 407
12.1 Why graphics? 408
12.2 A display model 409
12.3 A first example 410
12.4 Using a GUI library 414
12.5 Coordinates 415
12.6 Shapes 416
12.7 Using Shape primitives 417
12.8 Getting this to run 431
Chapter 13: Graphics Classes 437
13.1 Overview of graphics classes 438
13.2 Point and Line 440
13.3 Lines 443
13.4 Color 445
13.5 Line_style 448
13.6 Open_polyline 450
13.7 Closed_polyline 451
13.8 Polygon 453
13.9 Rectangle 455
13.10 Managing unnamed objects 459
13.11 Text 462
13.12 Circle 464
13.13 Ellipse 466
13.14 Marked_polyline 468
13.15 Marks 469
13.16 Mark 470
13.17 Images 472
Chapter 14: Graphics Class Design 479
14.1 Design principles 480
14.2 Shape 485
14.3 Base and derived classes 496
14.4 Benefits of object-oriented programming 504
Chapter 15: Graphing Functions and Data 509
15.1 Introduction 510
15.2 Graphing simple functions 510
15.3 Function 514
15.4 Axis 518
15.5 Approximation 521
15.6 Graphing data 526
Chapter 16: Graphical User Interfaces 539
16.1 User interface alternatives 540
16.2 The “Next” button 541
16.3 A simple window 542
16.4 Button and other Widgets 548
16.5 An example 552
16.6 Control inversion 556
16.7 Adding a menu 557
16.8 Debugging GUI code 562
Part III: Data and Algorithms 567
Chapter 17: Vector and Free Store 569
17.1 Introduction 570
17.2 vector basics 572
17.3 Memory, addresses, and pointers 574
17.4 Free store and pointers 577
17.5 Destructors 586
17.6 Access to elements 590
17.7 Pointers to class objects 591
17.8 Messing with types: void* and casts 593
17.9 Pointers and references 595
17.10 The this pointer 603
Chapter 18: Vectors and Arrays 611
18.1 Introduction 612
18.2 Copying 613
18.3 Essential operations 620
18.4 Access to vector elements 625
18.5 Arrays 627
18.6 Examples: palindrome 637
Chapter 19: Vector, Templates, and Exceptions 645
19.1 The problems 646
19.2 Changing size 649
19.3 Templates 656
19.4 Range checking and exceptions 668
19.5 Resources and exceptions 672
Chapter 20: Containers and Iterators 685
20.1 Storing and processing data 686
20.2 STL ideals 690
20.3 Sequences and iterators 694
20.4 Linked lists 698
20.5 Generalizing vector yet again 703
20.6 An example: a simple text editor 704
20.7 vector, list, and string 711
20.8 Adapting our vector to the STL 715
20.9 Adapting built-in arrays to the STL 718
20.10 Container overview 719
Chapter 21: Algorithms and Maps 727
21.1 Standard library algorithms 728
21.2 The simplest algorithm: find() 729
21.3 The general search: find_if() 732
21.4 Function objects 734
21.5 Numerical algorithms 738
21.6 Associative containers 744
21.7 Copying 757
21.8 Sorting and searching 762
Part IV: Broadening the View 769
Chapter 22: Ideals and History 771
22.1 History, ideals, and professionalism 772
22.2 Programming language history overview 783
Chapter 23: Text Manipulation 813
23.1 Text 814
23.2 Strings 814
23.3 I/O streams 819
23.4 Maps 820
23.5 A problem 828
23.6 The idea of regular expressions 830
23.7 Searching with regular expressions 833
23.8 Regular expression syntax 836
23.9 Matching with regular expressions 844
23.10 References 849
Chapter 24: Numerics 853
24.1 Introduction 854
24.2 Size, precision, and overflow 854
24.3 Arrays 859
24.4 C-style multidimensional arrays 859
24.5 The Matrix library 861
24.6 An example: solving linear equations 872
24.7 Random numbers 877
24.8 The standard mathematical functions 879
24.9 Complex numbers 880
24.10 References 882
Chapter 25: Embedded Systems Programming 887
25.1 Embedded systems 888
25.2 Basic concepts 891
25.3 Memory management 897
25.4 Addresses, pointers, and arrays 905
25.5 Bits, bytes, and words 916
25.6 Coding standards 935
Chapter 26: Testing 949
26.1 What we want 950
26.2 Proofs 952
26.3 Testing 952
26.4 Design for testing 978
26.5 Debugging 979
26.6 Performance 979
26.7 References 983
Chapter 27: The C Programming Language 987
27.1 C and C++: siblings 988
27.2 Functions 994
27.3 Minor language differences 1002
27.4 Free store 1009
27.5 C-style strings 1011
27.6 Input/output: stdio 1016
27.7 Constants and macros 1020
27.8 Macros 1021
27.9 An example: intrusive containers 1025
Part V: Appendices 1035
Appendix A: Language Summary 1037
A.1 General 1038
A.2 Literals 1041
A.3 Identifiers 1045
A.4 Scope, storage class, and lifetime 1046
A.5 Expressions 1049
A.6 Statements 1059
A.7 Declarations 1061
A.8 Built-in types 1062
A.9 Functions 1066
A.10 User-defined types 1069
A.11 Enumerations 1070
A.12 Classes 1071
A.13 Templates 1083
A.14 Exceptions 1086
A.15 Namespaces 1088
A.16 Aliases 1089
A.17 Preprocessor directives 1090
Appendix B: Standard Library Summary 1093
B.1 Overview 1094
B.3 Iterators 1100
B.4 Containers 1105
B.5 Algorithms 1112
B.6 STL utilities 1121
B.7 I/O streams 1124
B.8 String manipulation 1131
B.9 Numerics 1135
B.10 C standard library functions 1140
B.11 Other libraries 1150
Appendix C: Getting Started with Visual Studio 1151
C.1 Getting a program to run 1152
C.2 Installing Visual Studio 1152
C.3 Creating and running a program 1153
C.4 Later 1155
Appendix D: Installing FLTK 1157
D.1 Introduction 1158
D.2 Downloading FLTK 1158
D.3 Installing FLTK 1159
D.4 Using FLTK in Visual Studio 1159
D.5 Testing if it all worked 1160
Appendix E: GUI Implementation 1161
E.1 Callback implementation 1162
E.2 Widget implementation 1163
E.3 Window implementation 1164
E.4 Vector_ref 1166
E.5 An example: manipulating Widgets 1167
Glossary 1171
Bibliography 1177
Index 1181