#include<iostream>
using namespace std;

class Employee
{
  private:
    char *firstName;
    char *lastName;                                    
    static int count;    
  public:
    Employee( const char * const first, const char * const last){
      firstName = new char[ strlen( first ) + 1 ];
      strcpy( firstName, first );
      
      lastName = new char[ strlen( last ) + 1 ];
      strcpy( lastName, last );
      
      count++; 
      cout << "Employee constructor for " << firstName
           << ' ' << lastName << " called." << endl;
    }
    ~Employee(){
       cout << "~Employee() called for " << firstName
            << ' ' << lastName << endl;
 
       delete [] firstName; // release memory
       delete [] lastName; // release memory 
       count--;             
    }
    const char *getFirstName() const{
      return firstName;     
    }
    const char *getLastName() const{
      return lastName;
    }                                      
    static int getCount(){
      return count;       
    } 
}; // end class Employee
int Employee::count = 0;
main(){
    cout<<"Count = "<<Employee::getCount()<<endl;   
    Employee *e1Ptr = new Employee( "Ahmad", "Ali" );
    Employee *e2Ptr = new Employee( "Saeed", "Khalid" ); 
    cout<<"Count = "<<e1Ptr->getCount()<<endl;   
    cout << "\n\nEmployee 1: "
         << e1Ptr->getFirstName()<<" "<<e1Ptr->getLastName()
         << "\nEmployee 2: "
         << e2Ptr->getFirstName()<<" "<<e2Ptr->getLastName()<<"\n";
    delete e1Ptr;
    e1Ptr = 0;  
    delete e2Ptr;
    e2Ptr = 0;
    cout<<"Count = "<<Employee::getCount()<<endl;
    system("pause"); 
}
