У моєму проекті C ++ я маю два класи Particle
та Contact
. У Particle
класі у мене є змінна члена, std::vector<Contact> contacts
яка містить усі контакти Particle
об'єкта, і відповідні функції члена getContacts()
та addContact(Contact cont)
. Таким чином, у "Particle.h" я включаю "Contact.h".
У Contact
класі я хотів би додати код до конструктора для Contact
цього виклику Particle::addContact(Contact cont)
, так що він contacts
буде оновлений для обох Particle
об'єктів, між якими Contact
додається об'єкт. Таким чином, я повинен був би включити "Particle.h" у "Contact.cpp".
Моє запитання - чи це прийнятна / хороша практика кодування чи ні, який би був кращий спосіб реалізувати те, що я намагаюся досягти (просто кажучи, автоматично оновлюючи список контактів для певної частинки кожного разу, коли новий контакт створюється).
Ці класи будуть пов'язані між собою Network
класом, який матиме N частинок ( std::vector<Particle> particles
) та Nc контактів ( std::vector<Contact> contacts
). Але я хотів би мати такі функції, як particles[0].getContacts()
- чи нормально мати такі функції в Particle
класі в цьому випадку, чи є для цього краща "структура" асоціації в C ++ (з двох пов'язаних класів, які використовуються в іншому класі) .
Мені може знадобитися зміна точки зору в тому, як я підходжу до цього. Оскільки два класи з'єднані Network
об’єктом класу, чи типовим для коду / організації класу є інформація про з'єднання, повністю керована Network
об'єктом (у тому, що об'єкт Частинки не повинен знати про свої контакти, а отже, він не повинен мати getContacts()
члена функція). Потім, щоб знати, які контакти має конкретна частинка, мені потрібно було б отримати цю інформацію через Network
об'єкт (наприклад, за допомогою network.getContacts(Particle particle)
).
Чи було б менш типовим (можливо, навіть відстороненим) дизайном класу C ++ для об’єкта Particle, а також мати ці знання (тобто мати декілька способів доступу до цієї інформації - або через мережевий об'єкт, або через предмет частинок, що б не здавалося зручнішим) )?
Network
класу, який містить Particle
об'єкти та Contact
об'єкти. На основі цих базових знань я можу спробувати оцінити, чи відповідає це моїм конкретним потребам, які досі вивчаються / розвиваються в ході проекту.