[comp.lang.c++] Book Review: "The C++ WorkBook", Wiener & Pinson

jimad@microsoft.UUCP (JAMES ADCOCK) (02/21/90)

I just found and bought another C++ book:

"The C++ Workbook"
Wiener & Pinson, 349 pgs
Addison-Wesley 1990
ISBN: 0-201-50930-X
$28.95 [at my local bookstore]

So far I've read four of nine classes, and have not been impressed.
I greatly prefer Hanson's "The C++ Answer Book" in spite of the fact that
Hanson's book is based primarily on the 1.2 version of the language,
while "The C++ Workbook" claims to be based on 2.0

But "The C++ Workbook" gets some of the important 2.0 stuff totally wrong,
so I'm not sure that the fact that Hanson's book is based on 1.2 is 
a relative disadvantage.  For example,  "The C++ WorkBook" claims:

"  When declaring a data member to be *static* it *must not require
initialization*.  For ordinary C-types, the static declaration causes no
problems because ordinary C-types do not require initialization.  See, for
example, *static int small* in class A and *static int count* in class B in
Listing 3.17.

   *If an instance variable of a class is to be declared as static, the
requirement for no initialization requires that the class have no 
constructors and, further, that none of its data members be instances of a
class with constructors.*  A number of variations on the use of static
declarations with the resulting acceptance by CFront are given in Listing 3.17"

--Which is dead wrong, and would lead a person not knowing better to beleive
that static instances have almost no applicability.  

***Sigh*** 

For comparison, Lippman gets the description of static members dead right,
and very clearly, concisely, and correctly states their usages and the
issues involved.

Program examples in "The C++ Workbook" are given in an very-large, bold,
sans-serif, variable spaced text.  Indentation is by about half a character
width.  Many examples are very abstract:

[quote]

class Second
{
 private:
  int anInt = 6;  // error; initialization not allowed
  int anotherInt;

 public; [sic]
  Second( void ){anInt = 6;}

  Second( int inInt3m int inInt4 ) : anInt( inInt3 ), anotherInt( inInt4 ) {}

[unquote]

etc.  Thus, I find it hard to extract meaningful information from the
programming examples.  If I finish the book, and change my mind about it,
I will post again.  The book does include more of the OOP buzz-words than
most C++ texts.

For reference, compare to:

"C++ Primer", Lippman, Addison-Wesley, 1989, ISBN 0-201-16487-6, 464 pgs

"The C++ Answer Book", Hansen, Addison-Wesley, 1990, ISBN 0-201-11497-6,
578 pgs, $26.95

[standard disclaimer]

broughtn@flamingo.metaphor.com (Justin Broughton) (03/03/90)

As someone new to C++ I was obviously not aware of the inaccuracies. The book 
does however have its merits. It seems to take a much better approach to 
teaching C++ starting from OO principles (No buzz words intended I am sure).

I also like its honesty with respect to the obvious faults of C++ e.g.

"The more general support for generics ... is not well supported in C++. The
type void * is assignment compatible with a pointer to any other type. This
feature coupled with some macros and a lot of effort can provide additional
generic support in C++. Parameterized types, where the type is specified
by a parameter, offer a better solution for generic support"

Justin

-------------------------------------------------------------------------------
Justin Broughton, Metaphor a.k.a. broughtn@flamingo.metaphor.com
                                            "Mother Nature is dying. Wake up!"
My opinions are my own, My employer's are her/his own and hardly the twain meet 
-------------------------------------------------------------------------------