When you see the title, what do you expect? I expected some form of reference book, perhaps a book of tips on C++ programming based on the experience of a couple of programmers. Unfortunately what I found was yet another book introducing C++. Let me quote from page xv of the Preface:
This book is organised into traditional chapters using the picture book approach. Each chapter covers a topic in a logical progression. If you are not familiar with the basics of C++, begin with the first chapter and continue through each chapter in progression. By the end of the last chapter, you will have a good foundation in C++.
Let me explain what the authors mean by 'picture book approach'; basically they mean that they tell you everything twice. On the left-hand page they provide information in traditional textual format (sometimes this overflows to the top of the facing page. On the right-hand page they give essentially the same information via annotated code and tables. I do not like this format but I would not hold that against the authors, just a matter of personal taste. Variety in presentation is desirable because it lets us choose books that we feel comfortable with. so let me turn to the content and its quality.
Please note that the following simply samples the content and does not even begin to be a complete critique.
Despite this book having a 2002 copyright date none of the included header files in source code are C++ Standard headers. That immediately tells you something about the authors' level of C++. A quick glance at the text started to cause my hackles to rise. For example on page 34 (and before you wonder, there are numerous errors before that) I find 'Only variables that are an integer or character data type can be declared as a
register.'Leaving aside the careless use of the indefinite article - perhaps added by a badly informed copy editor - the statement is plain untrue and, as far as I know, has never been true. A minor point, but such errors leave the reader (legitimately, in this case) doubting all the authors' assertions.
When I came across the item on operator precedence (because I was skimming a chapter 2 on operators and expressions, that seemed to be overly complicated for so early in a book for novices) I felt something was wrong. Poking a little further revealed that the table - the only place precedence is covered - completely misses out that the precedence of the post and pre increment/decrement operators is different. He also ignores the fact that the array versions of new and delete are technically different operators and never mentions any of the newer operators (
typeid, new style casts,
throwetc.) It is not that I think such information is highly important to novices, it is just that they never provide a complete listing, whilst providing an excessive one for novices.
By now you will be getting a distinct impression that I do not like this book, you would be right. Even ten years ago, which is about the age of C++ that the authors are writing about (in other words, completely out of date) the errors in this book would have made it a poor product, today they are intolerable and reflect badly on the authors, the technical reviewers and the publishers (Prentice Hall should know much better than this). Let me give you one final example.
I looked for STL in the index and came up with 'Standard Template Library' page 390n. I presumed the 'n' meant 'and subsequent'. But investigation suggests it means 'footnote' because the only reference I have tracked down is the following footnote on page 390:
Some newer versions of C++ have a Standard Template Library (STL) that contains a predefined swap() method (swap with a lower case "s").
For the record, page 390 is the first page of the chapter 'Working with Sorting and Searching Data' and is about a bubble sort. The only good thing I can say is that anyone with the slightest knowledge of programming has a fighting chance of seeing through the slick presentation of this book and so will leave it on the shelf. If you really care about others, you will at least find a way to hide any copies you come across so that they will not corrupt others or help to further lower the reputation ofC++.
What really worries me about this book is that it is a second edition, and that Jim Keogh supposedly teaches C++ at Columbia University. No one should be teaching C++ who is not willing to spend time getting up to date. Writing such things as (page 112)
The string classes in C++ are designed to be a convenient and safe type ... This, of course begs the question, why has so much of this chapter focused on C-style strings. The answer is that a standardised C++ and the C++ Standard Library are relatively new (September 1998)...
While that last quoted paragraph is technically correct it is grossly misleading. The date quoted is the time when the FDIS became an international standard. Even that was three years ago. The authors can witter on about the need to understand legacy code and that current compilers do not yet conform to the Standard, the fact remains that the contents of this book are littered with errors and deal with a version of C++ that was being superseded a decade ago.
Books such as this one are the cause of people moving to Java (unfortunately for them, bad, ill-informed writers follow the trend). C++ is a massively better language than you will learn by reading this book.
Well that is all I have room for. Actually I am already four pages over size this time. But I now have thirty-six hours so no time to trim.