An alternative would be to put the data members in a 'protected' section.
class Employee
{
protected: // Derived classes can access protected members
string name; // For other code, protected is like private
double salary;
public:
Employee(const string& nm, double sal)
: name(nm), salary(sal) {}
string getName() const { return name; }
double getSalary() const { return salary; }
virtual double getBonus() const;
};