Thinking in C++, Vol. 1: Introduction to Standard C++, 2nd Edition - Softcover

9780139798092: Thinking in C++, Vol. 1: Introduction to Standard C++, 2nd Edition
View all copies of this ISBN edition:
 
 

In the first edition of Thinking in C++, Bruce Eckel synthesized years of C++ teaching and programming experience into a beautifully structured course in making the most of the language. It became an instant classic, winning the 1995 Software Development Jolt Cola Award for best book of the year. Now, Eckel has thoroughly rewritten Thinking in C++ to reflect the final ANSI/ISO C++ standard. Every page has been revisited and rethought, with many new examples and exercises -- all designed to help you understand C++ "down to the bare metal," so you can solve virtually any problem. Eckel starts with a detailed look at objects, showing how C++ programs can be constructed from off-the-shelf object libraries. This edition includes a new, chapter-length overview of the C features that are used in C++ -- plus a new CD-ROM containing an outstanding C seminar that covers all the foundations developers need before they can truly take advantage of C++. Eckel then walks through initialization and cleanup; function overloading and default arguments; constants; inline functions; name control; references and the copy constructor; operator overloading; and more. There are chapters on dynamic object creation; inheritance and composition; polymorphism and virtual functions, and templates. (Bonus coverage of string, templates, and the Standard Template Library, can be found at Eckel's web site.) Every chapter contains many modular, to-the-point examples, plus exercises based on Eckel's extensive experience teaching C++ seminars. Put simply, Eckel has made an outstanding book on C++ even better.

"synopsis" may belong to another edition of this title.

Review:
Fully revised and beefed up with plenty of new material on today's Standard C++, the new edition of Bruce Eckel's Thinking in C++: Volume I is an excellent tutorial to mastering this rich (and sometimes daunting) programming language, filled with expert advice and written in a patient, knowledgeable style.

The effective presentation, along with dozens of helpful code examples, make this book a standout. The text first sets the stage for using C++ with a tour of what object-oriented programming is all about, as well as the software design life cycle. The author then delves into every aspect of C++, from basic keywords and programming principles to more advanced topics, like function and operator overloading, virtual inheritance, exception handling, namespaces, and templates. C++ is a complex language, and the author covers a lot of ground using today's Standard C++, but without getting bogged down in excessive detail.

The emphasis here is on practical programming, so there's basic advice on using header files, preprocessor directives, and namespaces to organize code effectively. Each chapter ends with exercises (usually about two dozen), and the entire text of the book is available on the accompanying CD-ROM. (So is the second volume, which tours Standard C++ classes and other advanced topics.)

Whether you have read the first edition of this book or not, there is much to mine from Thinking in C++. This new version continues to set a high standard as an approachable and thorough tutorial. --Richard Dragan

Topics covered: Introduction to objects, inheritance, composition, polymorphism, exception handling, analysis and design fundamentals, advantages of C++, transitioning from C, compiling and building programs, writing C++ functions, flow control, C++ operators, data types, casting, debugging tips, pointers to functions, designing reusable C++ classes, conditional compilation and header files, access specifiers, constructors and destructors, function overloading and default arguments, using const and static effectively, inlining, namespaces, references, copy constructors, operator overloading, using new and delete for dynamic objects, virtual functions, abstract classes, introduction to templates, and iterators.

From the Inside Flap:
Preface

Like any, human language, C++ provides a way to express concepts. If successful, this median of expression wilt he significantly easier, and more flexible than the alternatives as problems grow larger and more complex.

You can't just look at C++ as a collection of features; some of the features make no sense in isolation. You can only use the sum of the parts if you are thinking about design, not simply coding. And to understand C++ this way, you must understand the problems with C and with programming in general. This book discusses programming problems, why they are problems, and the approach C++ has taken to solve such problems. Thus, the set of features I explain in each chapter will be based on the way that I see a particular type of problem being solved with the language. In this way I hope to move you, a little at a time, from understanding C to the point where the C++ mindset becomes your native tongue.

Throughout, I'll be taking the attitude that you want to build a model in your head that allows you to understand the language all the way down to the bare metal; if you encounter a puzzle, you'll be able to feed it to your model and deduce the answer. I will try to convey to you the insights that have rearranged my brain to make me start "thinking in C++." What's new in the second edition

This book is a thorough rewrite of the first edition to reflect all of the changes introduced in C++ by the finalization of the C++ Standard, and also to reflect what I've learned since writing the first edition. The entire text present in the first edition has been examined and rewritten, sometimes removing old examples, often changing existing examples and adding new ones, and adding many new exercises. Significant rearrangement and re-ordering of the material took place to reflect the availability of better tools and my improved understanding of how people learn C++. A new chapter was added which is a rapid introduction to the C concepts and basic C++ features for those who don't have the C background to tackle the rest of the book. The CD ROM bound into the back of the book contains a seminar that is an even gentler introduction to the C concepts necessary to understand C++ (or Java). It was created by Chuck Allison for my company (MindView, Inc.), and it's called "Thinking in C: Foundations for Java and C++." It introduces you to the aspects of C that are necessary for you to move on to C++ or Java, leaving out the nasty bits that C programmers must deal with on a day-to-day basis but that the C++ and Java languages steer you away from (or even eliminate, in the case of Java).

So the short answer to the question "what's different in the 2nd edition?" is: what isn't brand new has been rewritten, sometimes to the point where you wouldn't recognize the original examples and material. What's in Volume 2 of this book

The completion of the C++ Standard also added a number of important new libraries, such as string and the containers and algorithms in the Standard C++ Library, as well as new complexity in templates. These and other more advanced topics have been relegated to Volume 2 of this book, including issues such as multiple inheritance, exception handling, design patterns, and topics about building and debugging stable systems. How to get Volume 2

Just like the book you currently hold, Thinking in C++, Volume 2 is downloadable in its entirety from my Web site at BruceEckel. You can find information on the Web site about the expected print date of Volume 2.

The Web site also contains the source code for both of the books, along with updates and information about other seminars-on-CD ROM that MindView, Inc. offers, public seminars, and in-house training, consulting, mentoring, and walkthroughs. Prerequisites

In the first edition of this book, I decided to assume that someone else had taught you C and that you have at least a reading level of comfort with it. My primary focus was on simplifying what I found difficult: the C++ language. In this edition I have added a chapter that is a rapid introduction to C, along with the Thinking in C seminar-on-CD, but I am still assuming that you already have some kind of programming experience. In addition, just as you learn many new words intuitively by seeing them in context in a novel, it's possible to learn a great deal about C from the context in which it is used in the rest of the book. Learning C++

I clawed my way into C++ from exactly the same position I expect many of the readers of this book are in: as a programmer with a very no-nonsense, nuts-andbolts attitude about programming. Worse, my background and experience was in hardware-level embedded programming, in which C has often been considered a high-level language and an inefficient overkill for pushing bits around. I discovered later that I wasn't even a very good C programmer, hiding my ignorance of structures, malloc( ) and free( ), setjmp( ) and longjmp( ), and other "sophisticated" concepts, scuttling away in shame when the subjects came up in conversation instead of reaching out for new knowledge.'

When I began my struggle to understand C++, the only decent book was Bjarne Stroustrup's self-professed "expert's guide," so I was left to simplify the basic concepts on my own. This resulted in my first C++ book, which was essentially a brain dump of my experience. That was designed as a reader's guide to bring programmers into C and C++ at the same time. Both editions of the book garnered enthusiastic response.

At about the same time that Using C++ came out, I began teaching the language in seminars and presentations. Teaching C++ (and later, Java) became my profession; I've seen nodding heads, blank faces, and puzzled expressions in audiences all over the world since 1989. As I began giving in-house training to smaller groups of people, I discovered something during the exercises. Even those people who were smiling and nodding were confused about many issues. I found out, by creating and chairing the C++ and Java tracks at the Software Development Conference for many years, that I and other speakers tended to give the typical audience too many topics, too fast. So eventually, through both variety in the audience level and the way that I presented the material, I would end up losing some portion of the audience. Maybe it's asking too much, but because I am one of those people resistant to traditional lecturing (and for most people, I believe, such resistance results from boredom), I wanted to try to keep everyone up to speed.

For a time, I was creating a number of different presentations in fairly short order. Thus, I ended up learning by experiment and iteration (a technique that also works well in C++ program design). Eventually I developed a course using everything I had learned from my teaching experience. It tackles the learning problem in discrete, easy-to-digest steps and for a hands-on seminar (the ideal learning situation) there are exercises following each of the presentations. You can find out about my public seminars at BruceEckel, and you can also learn about the seminars that I've turned into CD ROMs.

The first edition of this book developed over the course of two years, and the material in this book has been road-tested in many forms in many different seminars. The feedback that I've gotten from each seminar has helped me change and refocus the material until I feel it works well as a teaching medium. But it isn't just a seminar handout; I tried to pack as much information as I could within these pages, and structure it to draw you through onto the next subject. More than anything, the book is designed to serve the solitary reader who is struggling with a new programming language. Goals

My goals in this book are to:

Present the material one simple step at a time, so the reader can easily digest each concept before moving on. Use examples that are as simple and short as possible. This often prevents me from tackling "real world" problems, but I've found that beginners are usually happier when they can understand every detail of an example rather than being impressed by the scope of the problem it solves. Also, there's a severe limit to the amount of code that can be absorbed in a classroom situation. For this I sometimes receive criticism for using "toy examples," but I'm willing to accept that in favor of producing something pedagogically useful. Carefully sequence the presentation of features so that you aren't seeing something you haven't been exposed to. Of course, this isn't always possible; in those situations, a brief introductory description will be given. Give you what I think is important for you to understand about the language, rather than everything that I know. I believe there is an "information importance hierarchy," and there are some facts that 95 percent of programmers will never need to know and that would just confuse them and add to their perception of the complexity of the language. To take an example from C, if you memorize the operator precedence table (I never did), you can write clever code. But if you have to think about it, it will confuse the reader/maintainer of that code. So forget about precedence, and use parentheses when things aren't clear. This same attitude will be taken with some information in the C++ language, which I think is more important for compiler writers than for programmers. Keep each section focused enough so the lecture time - and the time between exercise periods - is reasonable. Not only does this keep the audience's minds more active and involved during a hands-on seminar, it gives the reader a greater sense of accomplishment. Provide readers with a solid foundation so they can understand the issues well enough to move on to more difficult coursework and books (in particular, Volume 2 of this book). I've tried not to use any particular vendor's version of C++ because, for learning the language, I don't think that the details of a particular implementation are as important as the language itself. Most vendors' documentation concerning their own implementation specifics is adequate. Chapters

C++ is a language in which new and different features are built on top of an existing syntax. (Because of this, it is referred to as a hybrid object-oriented programming language.) As more people pass through the learning curve, we've begun to get a feel for the way programmers move through the stages of the C++ language features. Because it appears to be the natural progression of the procedurally-trained mind, I decided to understand and follow this same path and accelerate the process by posing and answering the questions that came to me as I learned the language and those questions that came from audiences as I taught the language.

This course was designed with one thing in mind: to streamline the process of learning C++. Audience feedback helped me understand which parts were difficult and needed extra illumination. In the areas in which I got ambitious and included too many features all at once, I came to know - through the process of presenting the material - that if you include a lot of new features, you have to explain them all, and the student's confusion is easily compounded. As a result, I've taken a great deal of trouble to introduce the features as few at a time as possible; ideally, only one major concept at a time per chapter.

The goal, then, is for each chapter to teach a single concept, or a small group of associated concepts, in such a way that no additional features are relied upon. That way you can digest each piece in the context of your current knowledge before moving on. To accomplish this, I leave some C features in place for longer than I would prefer. The benefit is that you will not be confused by seeing all the C++ features used before they are explained, so your introduction to the language will be gentle and will mirror the way you will assimilate the features if left to your own devices.

Here is a brief description of the chapters contained in this book:

Chapter 1: Introduction to Objects. When projects became too big and complicated to easily maintain, the "software crisis" was born, with programmers saying, "We can't get projects done, and if we can, they're too expensive!" This precipitated a number of responses, which are discussed in this chapter along with the ideas of object-oriented programming (OOP) and how it attempts to solve the software crisis. The chapter walks you through the basic concepts and features of OOP and also introduces the analysis and design process. In addition, you'll learn about the benefits and concerns of adopting the language and suggestions for moving into the world of C++.

Chapter 2: Making and Using Objects. This chapter explains the process of building programs using compilers and libraries. It introduces the first C++ program in the book and shows how programs are constructed and compiled. Then some of the basic libraries of objects available in Standard C++ are introduced. By the time you finish this chapter you'll have a good grasp of what it means to write a C++ program using off-the-shelf object libraries.

Chapter 3: The C in C++. This chapter is a dense overview of the features in C that are used in C++, as well as a number of basic features that are available only in C++. It also introduces the "make" utility that's common in the software development world and that is used to build all the examples in this book (the source code for the book, which is available at BruceEckel, contains makefiles for each chapter). Chapter 3 assumes that you have a solid grounding in some procedural programming language like Pascal, C, or even some flavors of Basic (as long as you've written plenty of code in that language, especially functions). If you find this chapter a bit too much, you should first go through the Thinking in C seminar on the CD that's bound with this book (and also available at BruceEckel).

Chapter 4: Data Abstraction. Most features in C++ revolve around the ability to create new data types. Not only does this provide superior code organization, but it lays the groundwork for more powerful OOP abilities. You'll see how this idea is facilitated by the simple act of putting functions inside structures, the details of how to do it, and what kind of code it creates. You'll also learn the best way to organize your code into header files and implementation files.

Chapter 5: Hiding the Implementation. You can decide that some of the data and functions in your structure are unavailable to the user of the new type by making them private. This means that you can separate the underlying implementation from the interface that the client programmer sees, and thus allow that implementation to be easily changed without affecting client code. The keyword class is also introduced as a fancier way to describe a new data type, and the meaning of the word "object" is demystified (it's a fancy variable).

Chapter 6: Initialization and Cleanup. One of the most common C errors results from uninitialized variables. The constructor in C++ allows you to guarantee that variables of your new data type ("objects of your class") will always be initialized properly. If your objects also require some sort of cleanup, y...

"About this title" may belong to another edition of this title.

  • PublisherPrentice Hall
  • Publication date2000
  • ISBN 10 0139798099
  • ISBN 13 9780139798092
  • BindingPaperback
  • Edition number2
  • Number of pages814
  • Rating

Other Popular Editions of the Same Title

9788131706619: Thinking in C++, 2e ,Volume 1

Featured Edition

ISBN 10:  8131706613 ISBN 13:  9788131706619
Publisher: PEARSON INDIA, 2000
Softcover

Top Search Results from the AbeBooks Marketplace

Stock Image

Eckel, Bruce
Published by Prentice Hall (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Paperback Quantity: 1
Seller:
GoldenWavesOfBooks
(Fayetteville, TX, U.S.A.)

Book Description Paperback. Condition: new. New. Fast Shipping and good customer service. Seller Inventory # Holz_New_0139798099

More information about this seller | Contact seller

Buy New
US$ 29.15
Convert currency

Add to Basket

Shipping: US$ 4.00
Within U.S.A.
Destination, rates & speeds
Stock Image

Eckel, Bruce
Published by Prentice Hall (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Softcover Quantity: 1
Seller:
LibraryMercantile
(Humble, TX, U.S.A.)

Book Description Condition: new. Seller Inventory # newMercantile_0139798099

More information about this seller | Contact seller

Buy New
US$ 30.55
Convert currency

Add to Basket

Shipping: US$ 3.00
Within U.S.A.
Destination, rates & speeds
Stock Image

Eckel, Bruce
Published by Prentice Hall (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Paperback Quantity: 1
Seller:
Wizard Books
(Long Beach, CA, U.S.A.)

Book Description Paperback. Condition: new. New. Seller Inventory # Wizard0139798099

More information about this seller | Contact seller

Buy New
US$ 31.07
Convert currency

Add to Basket

Shipping: US$ 3.50
Within U.S.A.
Destination, rates & speeds
Stock Image

Eckel, Bruce
Published by Prentice Hall (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Paperback Quantity: 1
Seller:
GoldBooks
(Denver, CO, U.S.A.)

Book Description Paperback. Condition: new. New Copy. Customer Service Guaranteed. Seller Inventory # think0139798099

More information about this seller | Contact seller

Buy New
US$ 30.40
Convert currency

Add to Basket

Shipping: US$ 4.25
Within U.S.A.
Destination, rates & speeds
Stock Image

Eckel, Bruce
Published by Prentice Hall (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Paperback Quantity: 1
Seller:
Grumpys Fine Books
(Tijeras, NM, U.S.A.)

Book Description Paperback. Condition: new. Prompt service guaranteed. Seller Inventory # Clean0139798099

More information about this seller | Contact seller

Buy New
US$ 30.65
Convert currency

Add to Basket

Shipping: US$ 4.25
Within U.S.A.
Destination, rates & speeds
Stock Image

Eckel, Bruce
Published by Prentice Hall (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Paperback Quantity: 1
Seller:
GoldenDragon
(Houston, TX, U.S.A.)

Book Description Paperback. Condition: new. Buy for Great customer experience. Seller Inventory # GoldenDragon0139798099

More information about this seller | Contact seller

Buy New
US$ 31.69
Convert currency

Add to Basket

Shipping: US$ 3.25
Within U.S.A.
Destination, rates & speeds
Stock Image

Eckel, Bruce
Published by Pearson (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Softcover Quantity: 1
Seller:
Front Cover Books
(Denver, CO, U.S.A.)

Book Description Condition: new. Seller Inventory # FrontCover0139798099

More information about this seller | Contact seller

Buy New
US$ 34.03
Convert currency

Add to Basket

Shipping: US$ 4.30
Within U.S.A.
Destination, rates & speeds
Stock Image

Eckel, Bruce
Published by Prentice Hall (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Softcover Quantity: 1
Seller:
BennettBooksLtd
(North Las Vegas, NV, U.S.A.)

Book Description Condition: New. New. In shrink wrap. Looks like an interesting title! 2.62. Seller Inventory # Q-0139798099

More information about this seller | Contact seller

Buy New
US$ 69.98
Convert currency

Add to Basket

Shipping: US$ 6.07
Within U.S.A.
Destination, rates & speeds
Stock Image

Bruce Eckel
Published by Prentice Hall Ptr (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Paperback Quantity: 1
Seller:
Revaluation Books
(Exeter, United Kingdom)

Book Description Paperback. Condition: Brand New. 2nd edition. 814 pages. 9.25x7.00x1.25 inches. In Stock. Seller Inventory # 0139798099

More information about this seller | Contact seller

Buy New
US$ 82.95
Convert currency

Add to Basket

Shipping: US$ 12.45
From United Kingdom to U.S.A.
Destination, rates & speeds
Seller Image

Eckel, Bruce
Published by Pearson (2000)
ISBN 10: 0139798099 ISBN 13: 9780139798092
New Softcover Quantity: 1
Seller:
Pieuler Store
(Suffolk, United Kingdom)

Book Description Condition: new. Book is in NEW condition. Satisfaction Guaranteed! Fast Customer Service!!. Seller Inventory # PSN0139798099

More information about this seller | Contact seller

Buy New
US$ 89.28
Convert currency

Add to Basket

Shipping: US$ 31.12
From United Kingdom to U.S.A.
Destination, rates & speeds