No meu projeto C ++, tenho duas classes Particle
e Contact
. Na Particle
classe, eu tenho uma variável de membro std::vector<Contact> contacts
que contém todos os contatos de um Particle
objeto e as funções de membro correspondentes getContacts()
e addContact(Contact cont)
. Assim, em "Particle.h", incluo "Contact.h".
Na Contact
classe, eu gostaria de adicionar código ao construtor para o Contact
que será chamado Particle::addContact(Contact cont)
, para que contacts
seja atualizado para os dois Particle
objetos entre os quais o Contact
objeto está sendo adicionado. Assim, eu teria que incluir "Particle.h" em "Contact.cpp".
Minha pergunta é se isso é aceitável / uma boa prática de codificação e, se não, qual seria a melhor maneira de implementar o que estou tentando alcançar (basta colocar, atualizar automaticamente a lista de contatos de uma partícula específica sempre que um novo contato é criado).
Essas classes serão ligadas por uma Network
classe que terá N partículas ( std::vector<Particle> particles
) e contatos Nc ( std::vector<Contact> contacts
). Mas eu queria poder ter funções como particles[0].getContacts()
- é aceitável ter essas funções na Particle
classe nesse caso, ou existe uma "estrutura" de associação melhor em C ++ para esse propósito (duas classes relacionadas sendo usadas em outra classe) .
Talvez eu precise de uma mudança de perspectiva aqui na maneira como estou abordando isso. Como as duas classes são conectadas por um Network
objeto de classe, é típico da organização de código / classe ter informações de conectividade totalmente controladas pelo Network
objeto (em que um objeto Particle não deve estar ciente de seus contatos e, consequentemente, não deve ter um getContacts()
membro função). Então, para saber quais contatos uma partícula específica possui, eu precisaria obter essas informações através do Network
objeto (por exemplo, usando network.getContacts(Particle particle)
).
Seria menos típico (talvez até desanimado) o design da classe C ++ para um objeto Particle ter esse conhecimento também (por exemplo, ter várias maneiras de acessar essas informações - por meio do objeto Rede ou do objeto Particle, o que parecer mais conveniente )?
Network
objeto de classe que contém Particle
objetos e Contact
objetos. Com esse conhecimento básico, posso tentar avaliar se ele se encaixa ou não nas minhas necessidades específicas, que ainda estão sendo exploradas / desenvolvidas à medida que avançamos no projeto.