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