Nel mio progetto C ++, ho due classi Particle
e Contact
. Nella Particle
classe, ho una variabile membro std::vector<Contact> contacts
che contiene tutti i contatti di un Particle
oggetto e le corrispondenti funzioni membro getContacts()
e addContact(Contact cont)
. Pertanto, in "Particle.h" includo "Contact.h".
Nella Contact
classe, vorrei aggiungere il codice al costruttore per Contact
quello che chiamerà Particle::addContact(Contact cont)
, in modo che contacts
venga aggiornato per entrambi gli Particle
oggetti tra i quali Contact
viene aggiunto l' oggetto. Quindi, dovrei includere "Particle.h" in "Contact.cpp".
La mia domanda è se questo sia accettabile o meno una buona pratica di codifica e, in caso contrario, quale sarebbe un modo migliore per implementare ciò che sto cercando di ottenere (in poche parole, aggiornando automaticamente l'elenco dei contatti per una particella specifica ogni volta che un nuovo contatto è creato).
Queste classi saranno legate insieme da una Network
classe che avrà N particelle ( std::vector<Particle> particles
) e contatti Nc ( std::vector<Contact> contacts
). Ma volevo essere in grado di avere funzioni come particles[0].getContacts()
- va bene avere tali funzioni nella Particle
classe in questo caso, oppure esiste una "struttura" di associazione migliore in C ++ per questo scopo (di due classi correlate usate in un'altra classe) .
Potrei aver bisogno di un cambiamento di prospettiva qui nel modo in cui mi sto avvicinando a questo. Dato che le due classi sono connesse da un Network
oggetto class, è tipica dell'organizzazione codice / classe avere informazioni di connettività interamente controllate Network
dall'oggetto (in quanto un oggetto Particle non dovrebbe essere a conoscenza dei suoi contatti e, di conseguenza, non dovrebbe avere un getContacts()
membro funzione). Quindi, per sapere quali contatti ha una specifica particella, avrei bisogno di ottenere tali informazioni attraverso l' Network
oggetto (ad esempio, usando network.getContacts(Particle particle)
).
Sarebbe meno tipico (forse anche scoraggiato) il design della classe C ++ per un oggetto Particle anche avere quella conoscenza (cioè avere più modi per accedere a tali informazioni - attraverso l'oggetto Network o l'oggetto Particle, a seconda di quale sembra più conveniente )?
Network
oggetto di classe che contiene Particle
oggetti e Contact
oggetti. Con questa conoscenza di base, posso quindi provare a valutare se si adatta o meno alle mie esigenze specifiche, che sono ancora esplorate / sviluppate mentre procedo nel progetto.