Наследование и создание объекта

245
23 июля 2017, 11:17

Здравствуйте! Такая ситуация. Программа для подсчета зарплат сотрудникам.

Сотрудников 3 вида.

Есть базовый класс worker, от него получается 3 наследника: employee, manager, sales. Сведения о сотрудниках хранятся в базе данных.

Вот вытаскиваем мы сведения о каком-то сотруднике, в графе род деятельности - employee. Как создать объект именно класса employee? Т.е. для manager - объект класса manager и т.д.

Answer 1
#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
READ ALSO
Почему не работает PostMessage C++

Почему не работает PostMessage C++

Почему не работает этот код на C++ ?

352
Правильная таблица умножения

Правильная таблица умножения

Как сделать так, чтобы переменная number в цикле оставляла свое значение, которое будет введено с клавиатуры?

442
Подключение dll-библиотеки в Visual Studio 2015 C++

Подключение dll-библиотеки в Visual Studio 2015 C++

Добрый день! Нужна помощь! Написал программу, заказчик требует оформить ее в виде dll-библиотекиВынес объявления функций и классов в отдельный...

390
Соединить и отфильтровать массивы в select

Соединить и отфильтровать массивы в select

Подскажите у меня есть 2 массива данных, которые соответствуют друг другу (название и адрес): 1Title, 2

278