When one Employee variable is assigned to another, the compiler makes a copy, but it does not use the copy constructor!
The copy constructor is not sufficient because, the old value of the Employee must be deleted in an assignment to avoid a memory leak.
The assignment operator= differs from the copy constructor only because of this deletion.
void Employee::operator=(const Employee& other)
{
if ( other == &this ) { // What?
return;
}
delete [] name;
// rest is the same as the copy constructor
name = new char[strlen(other.name) + 1];
strcpy(name, other.name);
salary = other.salary;
}