This book is specifically aimed at being a course book. That does not prevent it from being a perfectly adequate book for private study. A question that always arises in such circumstances is the degree to which the book can be used without access to expert advisers. This applies for courses as well as for individual study because, regrettably many course leaders know far less than they should.
You will understand that I am not going to read every word of a 900-page textbook (unless it was of exceptional quality). I think those that know me will accept that I have enough expertise both at C++ and at presenting it to identify strengths and weaknesses without doing that. This book carries a 1999 copyright date and so must be judged against C++ as all current compilers support it.
Before I go into a few details I should say that I am unhappy with the general approach the author takes to the language. I would never introduce C++ through low-level structures but that is a style issue. There is no consistent view of the language and its use. Chapters seem to consist of sealed units. This is exactly the trap fallen into by textbooks aimed at being used by a variety of differently organised courses.
Let me mention a few omissions that would mar any newly published book on C++. The header files are the classic .h files that clearly indicate that the author is not using the Standard library but an earlier version. This will prove an increasing annoying defect as more and more compilers stop supporting the pre-standard version. You can couple this with a complete lack of namespaces. That is a serious omission for a variety of reasons, not least that students will be exposed throughout to an inferior style of C++ source code.
Despite the author's mention of the STL (he claims he is using string from it, actually
basic_stringis a template but is not part of the STL). He spends an entire chapter on a linked list (after he has covered templates) but does it as a specific class for a single type. He spends much of a chapter on arrays of char.
The author proudly proclaims that he devotes an entire chapter to inheritance. True, it is the last chapter and very much an afterthought. This chapter is a good example of the author's poor understanding of the essential elements. Every chapter includes 'Pitfall' items. There are three in this chapter but none of them mentions the absolute necessity to make a base class destructor virtual if it is intended to support a polymorphic hierarchy. Perhaps this is not surprising because the author's example (a pet hierarchy) falls into exactly that pit.
Considering the publisher, I have to ask why this book was not properly technically reviewed. I guess the first edition had good sales and the author just did a quick revision. The first edition wasn't that good but this one is definitely inadequate. Any competent technical reviewer would have highlighted many areas that needed drastic attention. Addison Wesley should not be detracting from the sales of books by their highly competent authors by publishing books like this one.
One final comment, it is unhelpful to delay the introduction of the C++ string till page 619. The result is that you have had to complicate a novice's code with arrays of char with all the consequential baggage.
If anyone suspects that I am being unduly harsh they are welcome to the review copy in exchange for a second review.