Nel mio progetto C ++, ho due classi Particlee Contact. Nella Particleclasse, ho una variabile membro std::vector<Contact> contactsche contiene tutti i contatti di un Particleoggetto e le corrispondenti funzioni membro getContacts()e addContact(Contact cont). Pertanto, in "Particle.h" includo "Contact.h".
Nella Contactclasse, vorrei aggiungere il codice al costruttore per Contactquello che chiamerà Particle::addContact(Contact cont), in modo che contactsvenga aggiornato per entrambi gli Particleoggetti tra i quali Contactviene 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 Networkclasse 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 Particleclasse 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 Networkoggetto class, è tipica dell'organizzazione codice / classe avere informazioni di connettività interamente controllate Networkdall'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' Networkoggetto (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 )?
Networkoggetto di classe che contiene Particleoggetti e Contactoggetti. 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.