У меня проблема с наследованием классов в моем коде. Вот что я делаю: у меня есть два класса, один называется Employee , а второй называется Manager . Сотрудник - это базовый класс, он имеет функцию, которая печатает Визитную карточку , содержащую название компании и функцию name () , которая печатает имя сотрудника. Класс Manager является производным классом и наследуется (publi c: Employee). Когда я пытаюсь распечатать ту же визитку для менеджера, на ней не отображается название, только название компании. В чем может быть проблема? Ниже приведен небольшой фрагмент, во-первых, класса Employee:
class Employee {
public:
// Constructor
Employee(const char* name, double salary) : _name(name), _salary(salary) {}
Employee() : _name(" "), _salary(0) {} // default constructor
// Accessors
const char* name() const { return _name.c_str() ; }
double salary() const { return _salary ; }
// Modifyers (if needed)
double set_salary( double salary) {
_salary = salary;
return _salary;
}
// Print functions
void businessCard(ostream& os = cout) const {
os << " +------------------+ " << endl
<< " | ACME Corporation | " << endl
<< " +------------------+ " << endl
<< " " << name() << endl ;
}
private:
string _name ;
double _salary ;
} ;
и, во-вторых, класса Manager:
class Manager : public Employee {
public:
// Constructors
Manager(const char* name, double salary, set<Employee*>& subordinates) :
_name(name), _salary(salary), _subs(subordinates) {}
...
// Accessors
const char* name() const {
string name;
name += _name;
name += " (Manager)";
return name.c_str() ;
}
void businessCard(ostream& os = cout) const {
Employee::businessCard();
}
private:
string _name ;
double _salary ;
} ;
Проблема, как мне кажется, заключается в name () function, потому что, если я напишу это явно, он появится на карте, хотя и не наследуется. Кто-нибудь может помочь?