Home > Store

Programming: Principles and Practice Using C++

Register your product to gain access to bonus material or receive a coupon.

Programming: Principles and Practice Using C++


  • Sorry, this book is no longer in print.
Not for Sale



* 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.


  • Copyright 2009
  • Dimensions: 7-3/8" x 9-1/4"
  • Edition: 1st
  • Book
  • ISBN-10: 0-321-54372-6
  • ISBN-13: 978-0-321-54372-1

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.

Sample Content

Online Sample Chapter

Preface to Bjarne Stroustrup's Programming: Principles and Practice Using C++

Sample Pages

Download the sample pages

Table of Contents

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


Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020