В моем проекте 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объекты. Обладая этими базовыми знаниями, я могу затем попытаться оценить, соответствует ли это моим конкретным потребностям, которые все еще изучаются / разрабатываются по мере продвижения в проекте.