У моєму проекті 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об'єкти. На основі цих базових знань я можу спробувати оцінити, чи відповідає це моїм конкретним потребам, які досі вивчаються / розвиваються в ході проекту.