Errata for "Scientific and Engineering C++: 
   An Introduction with Advanced Techniques and Examples"

by John J. Barton and Lee R. Nackman
1994, Addison-Wesley, Reading MA.
ISBN 0-201-53393-6

pg 281  Fig. 10.5  A black dot belongs below "GPIBController&" in the center of
the figure and a black solid arrow should run from the dot to bottom
of the funky dome shaped object on the right.

pg 321  ARM reference to 14. should be to 14.4c.

pg 337  Fig. 12.1 The trapezodial "interface" part of the three squares
on the left-center of the figure should have been black to match the
interface at the top-center.  The interface part of the fourth square
should not match.  The lines to this fourth square should have been
gray or dashed.

pg 521  Fig. 17.1 A third dashed line should run from the origin of
the other two lines to the bottom of third funky dome object on the bottom of
the figure.

pg 550 The code given for String::operator+=(const String& rhs) does
not work for self modification:
       String s = "abc";
       s += s;

The correct code is:

  String& String::operator+=(const String& rhs) { 
      char* new_data = 
          strcat(strcpy(new char[this->strlen() + rhs.strlen() + 1], data), rhs.data);
      delete [] data;
      data = new_data;
      return *this;
  }

The two sentences immediately following the code should read as
follows: "The first statement allocates the memory necessary to hold the result
string and copies the argument strings into the result.  Then the
original string is deleted, and the left-hand argument's pointer is
set to point to the result string."
