CDN$ 62.99
Only 1 left in stock (more on the way).
Ships from and sold by Gift-wrap available.
C Primer (4th Edition) has been added to your Cart
Have one to sell?
Flip to back Flip to front
Listen Playing... Paused   You're listening to a sample of the Audible audio edition.
Learn more
See this image

C++ Primer (4th Edition) Paperback – Feb 14 2005

4.3 out of 5 stars 3 customer reviews

See all 3 formats and editions Hide other formats and editions
Amazon Price
New from Used from
"Please retry"
CDN$ 62.99
CDN$ 45.51 CDN$ 24.00

There is a newer edition of this item:

C++ Primer (5th Edition)
CDN$ 50.95
In Stock.

Harry Potter and the Cursed Child
click to open popover

Special Offers and Product Promotions

  • You'll save an extra 5% on Books purchased from, now through July 29th. No code necessary, discount applied at checkout. Here's how (restrictions apply)

No Kindle device required. Download one of the Free Kindle apps to start reading Kindle books on your smartphone, tablet, and computer.
Getting the download link through email is temporarily not available. Please check back later.

  • Apple
  • Android
  • Windows Phone
  • Android

To get the free app, enter your mobile phone number.

Product Details

  • Paperback: 912 pages
  • Publisher: Addison-Wesley Professional; 4 edition (Feb. 14 2005)
  • Language: English
  • ISBN-10: 0201721481
  • ISBN-13: 978-0201721485
  • Product Dimensions: 17.9 x 4.8 x 23.1 cm
  • Shipping Weight: 1.4 Kg
  • Average Customer Review: 4.3 out of 5 stars 3 customer reviews
  • Amazon Bestsellers Rank: #350,105 in Books (See Top 100 in Books)
  •  Would you like to update product info, give feedback on images, or tell us about a lower price?

  • See Complete Table of Contents

Product Description

From the Inside Flap

C++ Primer, Fourth Edition, provides a comprehensive introduction to the C++ language. As a primer, it provides a clear tutorial approach to the language, enhanced by numerous examples and other learning aids. Unlike most primers, it also provides a detailed description of the language, with particular emphasis on current and effective programming techniques.

Countless programmers have used previous editions of C++ Primer to learn C++. In that time C++ has matured greatly. Over the years, the focus of the language--and of C++ programmers--has grown beyond a concentration on runtime efficiency to focus on ways of making programmers more efficient. With the widespread availability of the standard library, it is possible to use and learn C++ more effectively than in the past. This revision of the C++ Primer reflects these new possiblities.

Changes to the Fourth Edition

In this edition, we have completely reorganized and rewritten the C++ Primer to highlight modern styles of C++ programming. This edition gives center stage to using the standard library while deemphasizing techniques for low-level programming. We introduce the standard library much earlier in the text and have reformulated the examples to take advantage of library facilities. We have also streamlined and reordered the presentation of language topics.

In addition to restructuring the text, we have incorporated several new elements to enhance the reader's understanding. Each chapter concludes with a Chapter Summary and glossary of Defined Terms, which recap the chapter's most important points. Readers should use these sections as a personal checklist: If you do not understand a term, restudy the corresponding part of the chapter.

We've also incorporated a number of other learning aids in the body of the text:

  • Important terms are indicated in bold; important terms that we assume are already familiar to the reader are indicated in bold italics. Each term appears in the chapter's Defined Terms section.
  • Throughout the book, we highlight parts of the text to call attention to important aspects of the language, warn about common pitfalls, suggest good programming practices, and provide general usage tips. We hope that these notes will help readers more quickly digest important concepts and avoid common pitfalls.
  • To make it easier to follow the relationships among features and concepts, we provide extensive forward and backward cross-references.
  • We have provided sidebar discussions that focus on important concepts and supply additional explanations for topics that programmers new to C++ often find most difficult.
  • Learning any programming language requires writing programs. To that end, the primer provides extensive examples throughout the text.Our intent is to provide a clear, complete and correct guide to the language. We teach the language by presenting a series of examples, which, in addition to explaining language features, show how to make the best use of C++. Although knowledge of C (the language on which C++ was originally based) is not assumed, we do assume the reader has programmed in a modern block-structured language.

    Structure of This Book

    C++ Primer provides an introduction to the International Standard on C++, covering both the language proper and the extensive library that is part of that standard. Much of the power of C++ comes from its support for programming with abstractions. Learning to program effectively in C++ requires more than learning new syntax and semantics. Our focus is on how to use the features of C++ to write programs that are safe, that can be built quickly, and yet offer performance comparable to the sorts of low-level programs often written in C.

    C++ is a large language and can be daunting to new users. Modern C++ can be thought of as comprising three parts:

    • The low-level language, largely inherited from C
    • More advanced language features that allow us to define our own data types and to organize large-scale programs and systems
    • The standard library, which uses these advanced features to provide a set of useful data structures and algorithms

    Most texts present C++ in this same order: They start by covering the low-level details and then introduce the more advanced language features. They explain the standard library only after having covered the entire language. The result, all too often, is that readers get bogged down in issues of low-level programming or the complexities of writing type definitions and never really understand the power of programming in a more abstract way. Needless to say, readers also often do not learn enough to build their own abstractions.

    In this edition we take a completely different tack. We start by covering the basics of the language and the library together. Doing so allows you, the reader, to write significant programs. Only after a thorough grounding in using the library-- and writing the kinds of abstract programs that the library allows--do we move on to those features of C++ that will enable you to write your own abstractions.

    Parts I and II cover the basic language and library facilities. The focus of these parts is to learn how to write C++ programs and how to use the abstractions from the library. Most C++ programmers need to know essentially everything covered in this portion of the book.

    In addition to teaching the basics of C++, the material in Parts I and II serves another important purpose. The library facilities are themselves abstract data types written in C++. The library can be defined using the same class-construction features that are available to any C++ programmer. Our experience in teaching C++ is that by first using well-designed abstract types, readers find it easier to understand how to build their own types.

    Parts III through V focus on how we can write our own types. Part III introduces the heart of C++: its support for classes. The class mechanism provides the basis for writing our own abstractions. Classes are also the foundation for object-oriented and generic programming, which we cover in Part IV. The Primer concludes with Part V, which covers advanced features that are of most use in structuring large, complex systems.


From the Back Cover

"C++ Primer is well known as one of the best books for learning C++ and is useful for C++ programmers of all skill levels. This Fourth Edition not only keeps this tradition alive, it actually improves on it."
--Steve Vinoski, Chief Engineer, Product Innovation, IONA Technologies

"The Primer really brings this large and complex language down to size."
--Justin Shaw, Senior Member of Technical Staff, Electronic Programs Division, The Aerospace Corporation

"It not only gets novices up and running early, but gets them to do so using good programming practices."
--Nevin ":-)" Liber, Senior Principal Engineer (C++ developer since 1988)

This popular tutorial introduction to standard C++ has been completely updated, reorganized, and rewritten to help programmers learn the language faster and use it in a more modern, effective way.

Just as C++ has evolved since the last edition, so has the authors' approach to teaching it. They now introduce the C++ standard library from the beginning, giving readers the means to write useful programs without first having to master every language detail. Highlighting today's best practices, they show how to write programs that are safe, can be built quickly, and yet offer outstanding performance. Examples that take advantage of the library, and explain the features of C++, also show how to make the best use of the language. As in its previous editions, the book's authoritative discussion of fundamental C++ concepts and techniques makes it a valuable resource even for more experienced programmers.

Program Faster and More Effectively with This Rewritten Classic
  • Restructured for quicker learning, using the C++ standard library
  • Updated to teach the most current programming styles and program design techniques
  • Filled with new learning aids that emphasize important points, warn about common pitfalls, suggest good programming practices, and provide general usage tips
  • Complete with exercises that reinforce skills learned
  • Authoritative and comprehensive in its coverage

The source code for the book's extended examples is available on the Web at the address below.

See all Product Description

What Other Items Do Customers Buy After Viewing This Item?

Customer Reviews

4.3 out of 5 stars
5 star
4 star
3 star
2 star
1 star
See all 3 customer reviews
Share your thoughts with other customers

Top Customer Reviews

Format: Paperback
This book differentiates itself from a bunch of other similar books in that it provides a concise, accurate and yet comprehensive description to the C++ language. More importantly, its examples are well thought of and the techniques described stay current with the software industry. Each paragraph in the book is describing a single concept and never has repetitions. When referring to concepts in other chapters, the book indicates the page number right besides the related words, which makes it easy to find.

Some reviewers have commented that this book is not an easy read for the beginners. It is probably true, as this book has packed almost all important C++ concepts along with standard industry practice to it. However, if you really want to master C++, you have to understand them after all. Since the book is very concise and does not have repetition or duplicated paragraphs, it is advisable to read each chapter a few times to absorb them.

As a C++ programmer for a quite few years, I still find this 4th edition to be a valuable book both as an introduction and a reference manual. Excellent book!
Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback.
Sorry, we failed to record your vote. Please try again.
Report abuse
Format: Paperback
C++ Primer - Fourth Edition has a really effective way of teaching you the C++ programming language-full detail of what every bit of code does. Have you ever looked at C++ code and had no idea what all of it meant? This book will teach you every single bit of what that code does.
The book is laid out in approximately 17 different chapters which are then divided into an average of 9-15 sections. Each chapter is focused on one key subject such as the begining steps and more advanced techniques to use your code. Within those chapters you have each section slowly explaining in detail what each bit of code you're seeing is doing.
Now as I've said before, this book explains every bit of code in detail, but this doesn't mean that this book isn't for just beginners. The books cover states that over 48,000 programmers have learned the coding language from beginners to more advanced.
About every other page contains tips and secrets to successful coding which stand out in gray boxes. Some of the most smallest things are mentioned here such as how comments work in your code to how your code should be formatted. These tips will help you inprove your coding habits very much.
Now you're probably thinking, "This is just another one of those reviews which show each good part of the book. It's not like they're going to give me any info on weak parts of the book!", Well in fact you're wrong. This book isn't all positive. There's some parts in this book which can be very annoying such as lacking a glossary of needed terms even though most terms are put in bold print. There are very good examples of code in this book, but not all of them are the most interesting.
Read more ›
Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback.
Sorry, we failed to record your vote. Please try again.
Report abuse
Format: Paperback
I am in my final year of highschool and heading into computer science next year at university. I have taken (very simple) introductory programming courses in high school and have learned PHP and Java from "teach yourself" books on my own. I was looking for a book to quickly bring me up to speed in the world of C++ programming, and this is just the book to do it. As long as you have some experience using an object oriented programming language, this book this book is for you. However, if you are new to programming in general, you'll probably need to work though a "Teach Yourself in 21 Days" before tackling this one :-)
Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback.
Sorry, we failed to record your vote. Please try again.
Report abuse

Most Helpful Customer Reviews on (beta) HASH(0xa613e3c0) out of 5 stars 67 reviews
168 of 171 people found the following review helpful
HASH(0xa635ae04) out of 5 stars 4th Edition is Much Improved April 28 2005
By Paul M. Dubuc - Published on
Format: Paperback
It's too bad that Amazon has listed reviews here which apply to earlier editions of the book. This 4th edition is a very different book than the 3rd or previous editions. (Any review you see here prior to February 2005, when this edition was printed, doesn't apply to this book.) The front cover of this book says that more than 450,000 programmers have learned C++ from previous editions. I wasn't one of them, though I bought and started to read 2 previous editions in the attempt to be. I already new C very well and the approach taken in those editions bogged me down in too much detail that I already knew.

This 4th edition is a tremendous improvement over the others. The material has been completely reorganized and updated and is much more effectively presented. The text is sprinkled with highlighted tips, notes, warnings, and best practices that not only helpful in learning the material but in applying it well. Each chapter is summarized at the end and has a glossary of important terms and concepts. Exercises at the end of each section make this book a good candidate for classroom use as well as individual study. They even knocked 300 pages off the length of the 3rd edition!

If you want to learn C++ thoroughly and well using just one book, this is the book to buy.
143 of 146 people found the following review helpful
HASH(0xa635ae58) out of 5 stars Comprehensive, well written, well presented ... but.... Oct. 14 2005
By The Experimentalist - Published on
Format: Paperback Verified Purchase
Let me state up-front that this is an indispensable book for me, and, as a reference, or as a source for expanding a basic C++ capability, it's easily worth 5 stars, not 4. In fact, as an intermediate-level C++ user, this is the most indispensable book that I have. I have 15 C++ books on my shelf, and this one (the fourth edition) is the most comprehensive, even surpassing Stroustrup's tome in most areas. (Stroustrup's influence on Primer is pretty obvious in spots.) The book's depth and its style of presentation, however, will mean that it's not the best primer for newcomers, and that's why I only gave it a 4-star rating. Look at the painting metaphor expressed on the front cover of the book. This book is more than a primer: it's a full pallet of colors, and as such is more than a beginner "painter" will be able to put to use quickly. I need to clarify what I'm saying here.

You might ask how a book can be the most comprehensive available without being longer in page count. The answer comes down to style. This book rarely expends space on full-length, executable code examples. The treatment of nine out of ten subjects offers only snippets of code - not complete executable examples. Many books offer examples that take up multiple pages for the code and multiple pages for the line-by-line explanations of the code. This difference in presentation is the single biggest reason why C++ Primer can offer so much more thorough coverage of C++ language features in fewer than 900 pages. The downside is, if you intend to learn C++, you absolutely must experiment with working code - there is no other way. The fact that this book does not offer much complete working code means that you will have to spend more time getting yourself set up to experiment. This will be especially true if you are a beginner, just because it will be harder to get things working.

The conciseness of code examples is matched by conciseness of explanations. In this regard, however, I have found no downside: the vast majority of explanations are extremely clear to the point of elegance. I've found only a few flaws in clarity, which are probably left over from earlier editions.

The tremendous depth of this book will be another weakness for newcomers to C++ who need to get started quickly. In my opinion, you just can't get started quickly when every treatment of every subject has to cover all of the ins and outs of that subject. There are too many subjects and too many ins and outs. If you try to go straight through the book, you'd better be prepared to work lots and lots of problems along the way: it will take so long to get through it that if you don't practice as you go, you may find yourself forgetting almost as fast as you're learning.

The other side of the coin is this: if you really do take this book, work through it from start to finish, and really master the material, you'll have a fantastic knowledge of C++. I seriously doubt that three good college courses in C++ - assuming no prior programming experience - would teach as much. The fact that you'll have to develop your own working code to demonstrate each feature will, like the depth of treatment, make you a better programmer, even though it seriously slows you down in the process.

You can conclude, then that if you are a newcomer to C++, and especially if you are inexperienced with programming in general, this book will be a long, hard climb. I'd be willing to bet that fewer than 5 percent of purchasers of this book start at the beginning and work straight through. Even so, if you are a newcomer taking a C++ programming class or just using another book to get started, it will be valuable for parallel reading and will come in very handy when you want to do a deep dive. Finally, don't forget that if you have a basic grounding in C++ fundamentals and you want to grow from there, this is a dynamite, five-star opportunity.

I feel like I have to elaborate here a bit as well. Time after time after time, when I've wanted a better understanding of a really fine point on the language, I've turned to this book and been rewarded for doing so. Every single subject is explained fully and, in most cases, eloquently. You can learn to do a lot quickly in C++ using other resources, but C++ offers the ability to fine tune and get close to the hardware. This book will make you better understand what the compiler is doing. The authors took the time to make extensive use of cross-references, which are invaluable in a subject this complex. The explanations, bolstered by cross-references, tend to leave me more than satisfied that I've gotten a grip. When I finish a section and have some example code executing, I feel like I have a complete understanding: I rarely find myself asking, "... but what about ...." I could go on and on, but you get the message. (One reason I'm taking the time to write this is that I feel indebted to the authors!)

The book builds up a consistent set of semantics - more so than any other book I've read. One example is their thorough explanation and consistent use of the terms "declare" and "define." Another is example is "argument" and "parameter list." Unambiguous semantics are essential to unambiguous communication, and, as you know, programming is one of the most unforgiving disciplines there is; ambiguity is intolerable. This attention to detail pervades the entire book, beyond just semantics.

Also, like with Stroustrup's book, I don't have to worry about whether the authors got it right or wrong or only half-right. This is an authoritative work: these guys know their subject as well as they know how to communicate it.

I especially like the dark page summaries and glossaries that act as chapter boundaries. I like the highlighted notes, tips, "bewares," and best practices. I like the blocks of text that address "cautions." These features are value-multipliers for me.

I also appreciate that there is absolutely no subconscious assumption that you already know C. That assumption seems to creep into so many other books, even though the authors deny it.

I agree with other reviewers that this edition is a huge improvement over previous editions. (I have the second edition beside me as I write this.) Frankly, I don't like the earlier editions. My guess is that the new authors, who came on board for this edition, should get a lot of credit. (I know an absolutely brilliant guy who has done some real innovation with C++. For example, he wrote a C++ library that allows you to write C++ in Python style, while getting C++ performance. This same guy was so intimidated by an earlier edition of Primer that he put off trying to learn C++ for several years! I'm still trying to convince him to get the fourth edition!)

So the fourth edition is a vast improvement, but, assuming that we don't try to make it all things to all readers and stick with the objective of compact comprehensiveness, how could we improve it further? The code examples could be simpler. I think Schildt is the master of communicating through code examples, just because his examples do the best job of isolating on the subject at hand. C++ is an extremely broad language, and when I read about a concept, I don't want to be expected to know everything, especially code examples, that preceded it in the book. Primer could do a better job - at least for me - in that respect. Examples should not be codependent: each example should lean only on the preceding material as much as is necessary to get the point across. Stated another way, OO programmers are big on encapsulation; OO tutorial writers should use the same rigor in encapsulating modules of tutorial text. All experts agree that the best code is code that is easily readable. In a tutorial, the meaning of the code examples should jump off the page. Primer is not bad in this regard, but it could be better. Some will argue that leaning on previous material reinforces the learning of the material, and they will be right. In my opinion, however, that argument applies mostly to course textbooks where the learning of diverse features can be forced into a tightly channeled sequence. I often use Schildt and Holtzner for reference when I need a quick answer. (As an aside, Stroustrup's book is the worst, for me, in terms of code examples being unnecessarily complex and codependent, even though I consider his book second only to this one as an indispensable reference.)

Bottom line: C++ Primer is an amazing accomplishment. The authors have done the best job to date of sorting out and presenting in lucid fashion a vast and complex network of features. I speak from experience as a technical writer as well as a student of C++. I feel guilty for assigning only four stars, but I'm concerned about the newbie who sees a 5-star rating on a "primer," and rushes to spend his limited budget on this book as a sole reference. C++ Primer is a very wise investment if you are really serious about C++, whether newbie or expert, but most newbies will also need a primary resource that is more beginner-oriented. Other books I recommend, in addition to the ones mentioned previously, include Prata (a good tutorial and a good resource for complete code examples, although there is significant codependence of examples); Lafore; Josuttis' classic STL book (definitely not for beginners); Schildt's STL book, also for its code examples; Keough and Gray (for quick reference only); and Safir and Brown (which does assume that you know C).
56 of 57 people found the following review helpful
HASH(0xa6388150) out of 5 stars great book, but should be called C++ primer plus Feb. 16 2007
By T. Liu - Published on
Format: Paperback Verified Purchase
This is a great book for anyone who want to enhance his/her knowledge

on C++, but this is by no means a primer book. If you are new to C++,

read the book "C++ primer plus" first. It is so funny that the book

"C++ primer plus" (which is also a great book) is really an introductory

book. The names of these two books should be swapped because this book

introduces more advanced topics and the topics that an experience programmer should know but a student does not need to. From my teaching experience in a state university, I would suggest students to read C++ books in the following order:

C++ primer Plus

C++ Primer

Thinking in C++ (great book, free on the internet)

The C++ Programming Language (by Stroustrup)

Then you may want to read some books on special topics such as Visual C++, Database, etc.
13 of 13 people found the following review helpful
HASH(0xa6388048) out of 5 stars A good first C++ book which is also a great second book and a useful reference March 6 2010
By Alexandros Gezerlis - Published on
Format: Paperback Verified Purchase
As pointed out in other reviews: compared to previous editions, the 4th edition of the "C++ Primer" is considerably different (and shorter). For this edition, Barbara E. Moo (co-author of "Accelerated C++"), a long-time programmer and writer, vastly revamped and enhanced Stan Lippman's (and Josee Lajoie's) classic.

The Good: This book is over 800 pages long, and it is quite complete in its coverage, but it is highly readable. The "C++ Primer" can be used as an introductory text: the authors have interspersed a myriad of code snippets throughout the text (which they also integrated into complete working programs; these are provided on the publisher's website, packaged for different platforms). Similarly, there are exercises at the end of most sections; these are well thought out, and greatly facilitate the reader's learning (unauthorized solutions exist on the web in the form of a wiki). Furthermore, throughout the book parts of the text have been highlighted to call attention to common pitfalls, good programming practices, and important concepts. Finally, each chapter concludes with a summary and a glossary of defined terms. In contradistinction to many other popular volumes, this book teaches real C++, not "C with classes", i.e., it contains extensive treatments of the standard library containers and algorithms, of object-oriented programming, and of generic programming. For example, the coverage of the standard library in this book is much more extensive than in "C++ Primer Plus" by Stephen Prata, a book that is often compared with (or confused with) the "C++ Primer". Even so, the "C++ Primer" also covers a number of older topics such as C-style character strings, lower-level bit manipulation of integral values, and old-style casts. The material in this book is thematically organized (pointers, expressions, functions, classes, constructors, object-oriented programming, template programming, etc.). This, along with the many forward and backward cross-references, makes it a great reference both for people who have never read it, and for those who read it a while back.

The Bad: Object-oriented programming is covered in approximately 60 pages. The coverage is solid, just like in the rest of the book, but it is condensed. For the sake of comparison: Josuttis's book "Object-Oriented Programming in C++" devotes 170 pages on more or less the same topics. In other words, an object-oriented design background, while not strictly necessary, would make reading this book easier. This aspect of "condensedness" is a more general feature of reading the "C++ Primer": even though the book is quite long, there is no filler material. This slows the reader down, so it might interfere with one's progress when using this as a first C++ book. For example, the first 300 pages (perhaps mention but) do not discuss in detail the standard library algorithms, smart pointers, object-oriented or generic programming, and other aspects of professional C++ development. A related point: I mentioned above that the book works as a reference since it is complete and contains many cross-references. A side-effect of this is that some of the earlier chapters make repeated mention of topics that have not yet been covered; that's great if this is your second C++ book (since it means every chapter is complete), but is potentially too much information for a total newbie. Finally, this book was intentionally limited to Standard C++. As a result, it doesn't talk about TR1 (a specification for functionality being added to C++'s standard library) or boost (a collection of libraries offering TR1 implementations and much more), or threading in C++. A 5th edition of the "C++ Primer" will probably appear after the new standard (still known as C++0x) comes out.

Despite the few drawbacks that I have noted above, I believe that this is a wonderful book which deserves 5 stars.


Here are my suggestions on related reading.

Recommended prequel:

* Accelerated C++, by Andrew Koenig and Barbara E. Moo

An excellent first book on C++. Goes through many topics quite fast, but is highly readable. Covers essentially all of standard C++ in under 300 pages (see also my review of it on amazon).

Recommended follow-up:

* Effective C++, 3rd edition, by Scott Meyers

This assumes you have already come across all of the material contained in the "C++ Primer". It offers solid advice on numerous aspects of effective C++ development. Meyers also describes a few design patterns as well as more modern topics like TR1.

Alexandros Gezerlis
11 of 11 people found the following review helpful
HASH(0xa6388234) out of 5 stars thorough treatment, well written, too many typos March 24 2006
By M. Leisner - Published on
Format: Paperback
I've been programming in C for 25 years. In the last 15 years, I've read a number of C++ books (I even read the first half of Stroustrup's 3rd edition. This was the first treatment I've read which I really absorbed (part of the fact is I had to learn c++).

While the treatment is thorough, I found far too many typos in a 4th edition. I really abhor typos in a technical book where the characters in an example MUST be right for it to work.

Barbara Moo gave me a copy of the errata (I submitted a number of errors I found). But one of the MAJOR shortcomings is why do I have to look up the author's to get an errata? Shouldn't the errata be on Addison's web site? (I just looked -- its not there -- I sent them a message). Also, be able to find the answers would be valuable (For a reader, examples without answers don't
necessarily help much).

I don't think its an introductory programming book. I just looked up the word "primer" -- this book goes far beyond what a
"primer" would contain. It covers C++ in depth. A number of subjects are covered in a way so a range of solutions ot problems
are presented from bad to good to introduce new features.

One thing I missed was full examples of working programs, being dissected. There are a lot of snippets. not whole programs. I find larger examples would be a good teaching tool.

Overall, this is a very positive review -- the best, most thorough treatment I've read -- with some caveats.