Что было бы лучшим вариантом для реализации класса Employee?

0

Как найти Staffs и Manager для данного сотрудника? Вот определение моего класса:

class Employee
{
private:
    int id;
    string name;
    vector<Employee> boss;
    vector<Employee> staffs;

public:
    void addStaff(Employee e)
    {
        staffs.push_back(e);
    }

    void setBoss(Employee e)
    {
        boss.push_back(e);
    }

    Employee getManager()
    {
        vector<Employee>::iterator itr;
        itr = boss.begin();
        return (*itr);
    }
};

Чтобы найти штат, я повторяю вектор staffs. Что было бы лучшим способом реализовать это? Для каждого сотрудника должен быть один Manager. Таким образом, использование vector для босса/менеджера не является хорошим вариантом, не так ли?

  • 0
    Обычно я нахожу лучше разделить вещи на различные категории. Менеджер, Босс и Персонал должны быть в своем собственном классе, со ссылкой или несколькими ссылками на своего Менеджера, Босса или другого Штаба.
  • 1
    Этот вопрос кажется не по теме, потому что речь идет о проверке кода.
Показать ещё 3 комментария
Теги:
vector

1 ответ

1

Несмотря на то, что код здесь не будет компилироваться, потому что вы пытаетесь использовать класс внутри себя, проблема здесь, по-видимому, является недостатком дизайна больше всего на свете (вы могли бы исправить непосредственную проблему, используя вместо этого указатель, но я предложит вам сначала пересмотреть свой дизайн). Отношения между различными сотрудниками не являются атрибутом сотрудника, поэтому я смущаюсь хранить его как члена класса. Если бы я по какой-то причине пошел с дизайном, который у вас здесь, и сохранил отношения между сотрудниками в классе сотрудников, то я бы не стал хранить копии объектов-сотрудников по стоимости. Хранение копий по значению приводит к проблемам с синхронизацией данных и их последовательностью (не говоря уже о очень плохом использовании пространства, если существует большое количество отношений между сотрудниками). Было бы лучше использовать что-то вроде умных указателей для объектов-сотрудников.

Или вы можете изменить свой дизайн. Если каждый сотрудник может иметь уникальный идентификатор, вам лучше сохранить отношения за пределами класса employee. Там несколько структур данных, которые вы могли бы использовать для этого, по существу у вас есть некоторые графики, которые показывают отношения, где узлы являются сотрудниками, а грани - отношениями. Вы бы либо использовали интеллектуальные указатели, либо хранилище уникального ключа, который представляет сотрудников.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню