En mi proyecto C ++, tengo dos clases, Particley Contact. En la Particleclase, tengo una variable miembro std::vector<Contact> contactsque contiene todos los contactos de un Particleobjeto, y las funciones miembro correspondientes getContacts()y addContact(Contact cont). Por lo tanto, en "Particle.h", incluyo "Contact.h".
En la Contactclase, me gustaría agregar código al constructor para Contactque se llame Particle::addContact(Contact cont), de modo que contactsse actualice para los dos Particleobjetos entre los que Contactse agrega el objeto. Por lo tanto, tendría que incluir "Particle.h" en "Contact.cpp".
Mi pregunta es si esto es aceptable o buena práctica de codificación y, de lo contrario, cuál sería una mejor manera de implementar lo que estoy tratando de lograr (simplemente, actualizar automáticamente la lista de contactos para una partícula específica cada vez que un nuevo contacto es creado).
Estas clases estarán unidas por una Networkclase que tendrá N partículas ( std::vector<Particle> particles) y Nc contactos ( std::vector<Contact> contacts). Pero quería poder tener funciones como particles[0].getContacts(): ¿está bien tener tales funciones en la Particleclase en este caso, o hay una mejor "estructura" de asociación en C ++ para este propósito (de dos clases relacionadas que se utilizan en otra clase)? .
Es posible que necesite un cambio de perspectiva aquí en cómo me estoy acercando a esto. Dado que las dos clases están conectadas por un Networkobjeto de clase, es típico que la organización de código / clase tenga información de conectividad totalmente controlada por el Networkobjeto (en el sentido de que un objeto Particle no debe conocer sus contactos y, en consecuencia, no debe tener un getContacts()miembro función). Entonces, para saber qué contactos tiene una partícula específica, necesitaría obtener esa información a través del Networkobjeto (por ejemplo, usando network.getContacts(Particle particle)).
¿Sería menos típico (quizás incluso desalentado) el diseño de clase C ++ para que un objeto Particle también tenga ese conocimiento (es decir, tenga múltiples formas de acceder a esa información, ya sea a través del objeto Network o el objeto Particle, lo que sea más conveniente) )?
Networkobjeto de clase que contiene Particleobjetos y Contactobjetos. Con ese conocimiento básico, puedo intentar evaluar si se ajusta o no a mis necesidades específicas, que todavía se están explorando / desarrollando a medida que avanzo en el proyecto.