Приветствую.
Есть следующая задача. Существует список сотрудников двух типов: employee и manager.
Определил для них соответствующие классы:
class Person
{
public:
virtual void show() = 0;
};
class Employee: public Person
{
public:
void show()
{
std::cout << "Employee" << std::endl;
}
};
class Manager: public Person
{
public:
void show()
{
std::cout << "Manager" << std::endl;
}
};
Также, создал фабрику:
class PersonFactory
{
public:
static Person* create(const std::string &type)
{
if (type == "Employee")
return new Employee();
if (type == "Manager")
return new Manager();
return NULL;
}
};
Теперь можем создавать объекты динамически необходимого типа:
Person* emp = PersonFactory::create("Manager");
У менеджера есть список подчиненных сотрудников. Соответственно, класс должен содержать метод getListEmployee().
Но если мы добавим его в класс Manager, то придется добавлять и в родительский класс Person.
emp->getListEmployee(); // Будет ошибка, т.к. метод не определен в родительском классе
Но согласно общей концепции, у обычного сотрудника не может быть подчиненных. Значит метод getListEmployee() не нужен родительскому классу Person.
Как быть в таком случае? Как определять новые методы в родительских классах?