En mi proyecto C ++, tengo dos clases, Particle
y Contact
. En la Particle
clase, tengo una variable miembro std::vector<Contact> contacts
que contiene todos los contactos de un Particle
objeto, y las funciones miembro correspondientes getContacts()
y addContact(Contact cont)
. Por lo tanto, en "Particle.h", incluyo "Contact.h".
En la Contact
clase, me gustaría agregar código al constructor para Contact
que se llame Particle::addContact(Contact cont)
, de modo que contacts
se actualice para los dos Particle
objetos entre los que Contact
se 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 Network
clase 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 Particle
clase 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 Network
objeto de clase, es típico que la organización de código / clase tenga información de conectividad totalmente controlada por el Network
objeto (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 Network
objeto (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) )?
Network
objeto de clase que contiene Particle
objetos y Contact
objetos. 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.