Nel mio progetto C ++, ho due classi, Particle
e Contact
. Nella classe Particle
, ho una variabile membro std::vector<Contact> contacts
che contiene tutti i contatti di un oggetto Particle
e le funzioni membro corrispondenti getContacts()
e addContact(Contact cont)
. Pertanto, in "Particle.h", includo "Contact.h".
Nella classe Contact
, vorrei aggiungere codice al costruttore per Contact
che chiamerà Particle::addContact(Contact cont)
, in modo che contacts
sia aggiornato per entrambi gli oggetti Particle
tra cui Contact
oggetto è stato aggiunto. Quindi, dovrei includere "Particle.h" in "Contact.cpp".
La mia domanda è se questa sia accettabile o buona prassi di codifica e, in caso contrario, quale sarebbe un modo migliore per implementare ciò che sto cercando di ottenere (semplicemente inserire, aggiornando automaticamente l'elenco dei contatti per una particella specifica ogni volta viene creato un nuovo contatto).
Queste classi saranno legate insieme da una classe Network
che avrà particelle N ( 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 classe Particle
in questo caso, o c'è una migliore "struttura" di associazione in C ++ per questo scopo (di due classi correlate essere usato in un'altra classe).
Potrei avere bisogno di un cambiamento di prospettiva qui in come mi sto avvicinando a questo. Poiché le due classi sono connesse da un oggetto di classe Network
, è tipico dell'organizzazione codice / classe avere informazioni sulla connettività interamente controllate dall'oggetto Network
(nel senso che un oggetto Particle non dovrebbe essere a conoscenza dei suoi contatti e, di conseguenza, non dovrebbe avere una funzione membro getContacts()
). Quindi, per sapere quali contatti ha una particella specifica, avrei bisogno di ottenere quell'informazione attraverso l'oggetto Network
(ad es. Usando network.getContacts(Particle particle)
).
Sarebbe meno tipico (forse anche scoraggiato) il design della classe C ++ per un oggetto Particle per avere anche quella conoscenza (cioè, avere più modi di accedere a tali informazioni - attraverso l'oggetto Network o l'oggetto Particle, qualunque sia sembra più conveniente)?