Program crashes in runtime. Have no idea why.
Here's the code:
Employee.hCODE
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
class Employee
{
public:
Employee(const char*, const char*);
~Employee();
const char* GetFirstName() const;
const char* GetLastName() const;
static int GetCount(); // static member function, returns # of objects initialized
private:
char* _firstName;
char* _lastName;
static int _count; //static data member, number of objects instantiated
};
#endif
Employee.cppCODE
#include "Employee.h"
#include <iostream>
#include <cstring>
using namespace std;
//----------------------------------------------
// defines and initializes static data member
//----------------------------------------------
int Employee::_count = 0;
//----------------------------------------------
// define static member function that returns
// number of Employee objects instantiated
//----------------------------------------------
int Employee::GetCount()
{
return _count;
}
//----------------------------------------------
// constructor dynamically allocates space for
// first and last name and uses strcpy_s to
// copy first and last names into the object
//----------------------------------------------
Employee::Employee(const char* first, const char* last)
{
_firstName = new char[strlen(first) + 1];
strcpy_s(_firstName, sizeof(_firstName), first);
_lastName = new char[strlen(last) + 1];
strcpy_s(_lastName, sizeof(_lastName), last);
// increment static count of employees
++_count;
cout << "Employee constructor for " << _firstName << ' ' << _lastName << " called.\n\n";
}
//-----------------------------------------------------
// Destructor deallocates dynamically allocated memory
//-----------------------------------------------------
Employee::~Employee()
{
cout << "~Employee() called for " << _firstName << ' ' << _lastName << "\n\n";
delete [] _firstName;
delete [] _lastName;
// decrement static count of employees
--_count;
}
//-----------------------------------------------------
// return first name of employee
//-----------------------------------------------------
const char* Employee::GetFirstName() const
{
//---------------------------------------------------------
// const before return type prevents client from modifying
// private data; client should copy returned sring before
// destrctor deletes storage to prevent undefined pointer
//---------------------------------------------------------
return _firstName;
}
const char* Employee::GetLastName() const
{
//---------------------------------------------------------
// const before return type prevents client from modifying
// private data; client should copy returned sring before
// destrctor deletes storage to prevent undefined pointer
//---------------------------------------------------------
return _lastName;
}
main.cppCODE
#include <iostream>
#include <conio.h>
using namespace std;
#include "Employee.h"
int main ()
{
cout << "Number of employees before initialization is "
<< Employee::GetCount() << endl; // use class name
Employee* emp1Ptr = new Employee("Susan", "Baker");
Employee* emp2Ptr = new Employee("Robert", "Jones");
cout << "Number of employees after instantiation is " << emp1Ptr->GetCount();
cout << "\n\nEmployee 1: "
<< emp1Ptr->GetFirstName() << " "
<< emp1Ptr->GetLastName()
<< "\nEmployee 2: "
<< emp2Ptr->GetFirstName() << " "
<< emp2Ptr->GetLastName() << "\n\n";
delete emp1Ptr; // recapture memory
emp1Ptr = 0; // disconnect pointer from free-store space
delete emp2Ptr; // recapture memory
emp2Ptr = 0; // disconnect pointer from free-store space
cout << "number of employees after deletion is: " << Employee::GetCount() << endl;
_getch();
return EXIT_SUCCESS;
}