45 / 2 / 0
Регистрация: 24.05.2018
Сообщений: 30
|
|||||||||||
1 | |||||||||||
Хранение в контейнере указателей на объекты класса24.04.2019, 09:18. Показов 3849. Ответов 3
Здравствуйте, очень прошу помочь разобраться:
У меня есть учебная задача: У меня была мысль сделать класс Компания, через этот класс взаимодействовать с пользователем: -добавлять новых сотрудников, и их подчиненных -удалять сотрудников -запрашивать список всех подчиненных конкретного сотрудника, -запрашивать зарплату конкретного сотрудника и его подчиненных или зарплату всех сотрудников компании. И сделать 3 класса сотрудников: Employee (базовый), Manager, Sales В классе Компания я хотела хранить (в set) созданные объекты сотрудников, а в объектах сотрудников - хранить указатели или итераторы на его подчиненных. Попыталась сделать через shared_ptr (чтобы можно было хранить всех сотрудников в одном контейнере), и добавляя эти объекты - сохранять итератор, который возвращает метод insert и передавать этот итератор "начальнику", но так программа даже не компилируется. Потом я создала 3 дека (для Employee, Manager, Sales) в классе Компания, туда при добавлении сотрудника вставляла созданный объект, а "начальнику" добавляла указатель на этот объект в деке, программа стала компилироваться, но не работает(( У меня есть код, но он совсем пока некрасивый, пожалуйста, не ругайтесь, сама знаю что он ужасен Классы сотрудников будут внутри класса компании, поэтому поля public
или надо полностью менять подход? Тогда, пожалуйста намекните на что обратить внимание.
0
|
24.04.2019, 09:18 | |
Ответы с готовыми решениями:
3
Вектор указателей на объекты класса Динамический массив указателей на объекты класса Массивы указателей на объекты как данные класса Создать массив указателей на объекты класса, описывающего насекомых |
Комп_Оратор)
|
|
24.04.2019, 10:05 | 2 |
Сообщение было отмечено Nolwelin как решение
Решение
Nolwelin, я не смогу ответить достаточно объёмно так как у Вас довольно обширная задача с использованием паттернов. Тут просматривается фасад, стратегия, фабрика и возможно другие. Я попробую ответить на вот этот момент:
Боюсь что не set ни vector ни какой-либо иной контейнер кроме списка (list например) не подойдут для хранения их итераторов. Только список сохраняет валидность итераторов при удалении/добавлении. О хранении указателей внутрь контейнера я посоветовал бы забыть. Особенно это касается множества и словаря/карты. Любое прямое изменение в члене данных множества может его испортить. Но даже если хранилищем избрать список, то придётся повозиться с обеспечением доступа и обеспечением идиомы владения. Посмотрите из любопытства в моём блоге 1,2,3,4,5... Простой путь - Лучше контейнер. Вектор указателей. Поскольку моделировать прямые отношения между сотрудниками в Вашей задаче не нужно, то доступ через начальников подойдёт. Имейте в виду, что у начальника фирмы другие начальники в подчинённых. Указатели - смартпойнтеры или даже сырые (будете воевать с прямым выделением/освобождением). Каждый сотрудник должен уметь подсчитать свою зарплату. И каждый сотрудник должен уметь выполнять групповые операции над контейнером подчинённых (например предоставлять различные списки сотрудников, предоставлять их общую зарплату и т.п.). Получится этакое дерево. Добавлено через 5 минут ps каждый сотрудник (не только начальник) содержит указатель на список подчинённых. У работников (листьев) он нулевой.
1
|
45 / 2 / 0
Регистрация: 24.05.2018
Сообщений: 30
|
|
25.04.2019, 10:33 [ТС] | 3 |
IGPIGP, спасибо, навели на мысль программа работает
0
|
Комп_Оратор)
|
|
25.04.2019, 10:52 | 4 |
Рад что Вы правильно восприняли мои сентенции. Тут важен общий подход. В конце концов можно указатель спрятать в Pimpl под завесой хост-класса (главного класса - пользователя стратегий) и реализовать идиому значения для полиморфного типа. Тогда контейнер может использовать значения. В общем, свобода и творчество. Удачи.
1
|
25.04.2019, 10:52 | |
25.04.2019, 10:52 | |
Помогаю со студенческими работами здесь
4
Можно ли динамически выделить память под массив указателей, на объекты класса? Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? Хранение сложных классов в контейнере Хранение в контейнере обьектов разных классов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |