В моем проекте 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
объектом (в том смысле, что объект Particle не должен знать о своих контактах и, следовательно, он не должен иметь getContacts()
члена функция). Затем, чтобы узнать, какие контакты имеет конкретная частица, мне нужно было бы получить эту информацию через Network
объект (например, используя network.getContacts(Particle particle)
).
Будет ли менее типичным (возможно, даже не поощряемым) дизайн класса C ++ для объекта Particle также обладать этими знаниями (т. Е. Иметь несколько способов доступа к этой информации - через объект Network или объект Particle, в зависимости от того, что кажется более удобным) )?
Network
объект класса, который содержит Particle
объекты и Contact
объекты. Обладая этими базовыми знаниями, я могу затем попытаться оценить, соответствует ли это моим конкретным потребностям, которые все еще изучаются / разрабатываются по мере продвижения в проекте.