text: // Fig. 7.18: employee2.cpp
  // Member-function definitions for class Employee.
  #include <iostream>
  
  using std::cout;
  using std::endl;
  
  #include <new>          // C++ standard new operator
  #include <cstring>      // strcpy and strlen prototypes
  
  #include "employee2.h"  // Employee class definition 
  
  // define and initialize static data member
  int Employee::count = 0;
  
  // define static member function that returns number of 
  // Employee objects instantiated
  int Employee::getCount() 
  { 
     return count; 
     
  } // end static function getCount
  
  // constructor dynamically allocates space for
  // first and last name and uses strcpy to copy
  // first and last names into the object
  Employee::Employee( const char *first, const char *last )
  {
     firstName = new char[ strlen( first ) + 1 ];
     strcpy( firstName, first );
  
     lastName = new char[ strlen( last ) + 1 ];
     strcpy( lastName, last );
  
     ++count;  // increment static count of employees
  
     cout << "Employee constructor for " << firstName
          << ' ' << lastName << " called." << endl;
  
  } // end Employee constructor
  
  // destructor deallocates dynamically allocated memory
  Employee::~Employee()
  {
     cout << "~Employee() called for " << firstName
          << ' ' << lastName << endl;
  
     delete [] firstName;  // recapture memory
     delete [] lastName;   // recapture memory
  
     --count;  // decrement static count of employees
  
  } // end ~Employee destructor
  
  // return first name of employee
  const char *Employee::getFirstName() const
  {
     // const before return type prevents client from modifying
     // private data; client should copy returned string before
     // destructor deletes storage to prevent undefined pointer
     return firstName;
  
  } // end function getFirstName
  
  // return last name of employee
  const char *Employee::getLastName() const
  {
     // const before return type prevents client from modifying
     // private data; client should copy returned string before
     // destructor deletes storage to prevent undefined pointer
     return lastName;
  
  } // end function getLastName
  
  /**************************************************************************
   * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice      *
   * Hall. All Rights Reserved.                                             *
   *                                                                        *
   * DISCLAIMER: The authors and publisher of this book have used their     *
   * best efforts in preparing the book. These efforts include the          *
   * development, research, and testing of the theories and programs        *
   * to determine their effectiveness. The authors and publisher make       *
   * no warranty of any kind, expressed or implied, with regard to these    *
   * programs or to the documentation contained in these books. The authors *
   * and publisher shall not be liable in any event for incidental or       *
   * consequential damages in connection with, or arising out of, the       *
   * furnishing, performance, or use of these programs.                     *
   *************************************************************************/
  