Здравствуйте! Такая ситуация. Программа для подсчета зарплат сотрудникам.
Сотрудников 3 вида.
Есть базовый класс worker, от него получается 3 наследника: employee, manager, sales. Сведения о сотрудниках хранятся в базе данных.
Вот вытаскиваем мы сведения о каком-то сотруднике, в графе род деятельности - employee. Как создать объект именно класса employee? Т.е. для manager - объект класса manager и т.д.
#include <iostream>
#include <string>
#include <map>
#include <functional>
class Worker
{
public:
virtual std::string name() = 0;
};
class Manager : public Worker
{
public:
virtual std::string name() override
{
return "I am Manager";
}
};
class Employee : public Worker
{
public:
virtual std::string name() override
{
return "I am Employee";
}
};
int main(int argc, char *argv[])
{
std::map<std::string, std::function<Worker*()>> workerFactory;
workerFactory["manager"] = []{return new Manager();};
workerFactory["employee"] = []{return new Employee();};
Worker *worker1 = workerFactory["manager"]();
Worker *worker2 = workerFactory["employee"]();
std::cout << worker1->name() << std::endl;
std::cout << worker2->name() << std::endl;
return 0;
}
Вывод:
I am Manager
I am Employee
Сборка персонального компьютера от Artline: умный выбор для современных пользователей