In meinem C ++ - Projekt habe ich zwei Klassen Particle
und Contact
. In der Particle
Klasse habe ich eine Mitgliedsvariable, std::vector<Contact> contacts
die alle Kontakte eines Particle
Objekts sowie die entsprechenden Mitgliedsfunktionen getContacts()
und enthält addContact(Contact cont)
. Daher füge ich in "Partikel.h" "Kontakt.h" ein.
In der Contact
Klasse möchte ich dem Konstruktor Code für Contact
diesen Aufruf hinzufügen Particle::addContact(Contact cont)
, damit dieser contacts
für beide Particle
Objekte aktualisiert wird , zwischen denen das Contact
Objekt hinzugefügt wird. Daher müsste ich "Particle.h" in "Contact.cpp" aufnehmen.
Meine Frage ist, ob dies eine akzeptable / gute Codierungspraxis ist oder nicht, und wenn nicht, was wäre ein besserer Weg, um das zu implementieren, was ich erreichen möchte (einfach ausgedrückt, die Liste der Kontakte für ein bestimmtes Partikel wird bei jedem neuen Kontakt automatisch aktualisiert geschaffen).
Diese Klassen werden durch eine Network
Klasse mit N Partikeln ( std::vector<Particle> particles
) und Nc Kontakten ( std::vector<Contact> contacts
) miteinander verbunden. Aber ich wollte in der Lage sein, Funktionen zu haben wie particles[0].getContacts()
- ist es Particle
in diesem Fall in Ordnung, solche Funktionen in der Klasse zu haben , oder gibt es in C ++ zu diesem Zweck eine bessere Assoziationsstruktur (von zwei verwandten Klassen, die in einer anderen Klasse verwendet werden)? .
Möglicherweise brauche ich hier einen Perspektivwechsel in meiner Herangehensweise. Da die beiden Klassen durch ein Network
Klassenobjekt verbunden sind, ist es eine typische Code- / Klassenorganisation, Konnektivitätsinformationen vollständig vom Network
Objekt steuern zu lassen (insofern sollte ein Partikelobjekt seine Kontakte nicht kennen und folglich kein getContacts()
Mitglied haben Funktion). Um dann zu wissen, welche Kontakte ein bestimmtes Teilchen hat, müsste ich diese Informationen über das Network
Objekt erhalten (z network.getContacts(Particle particle)
. B. mit ).
Wäre es weniger typisch (vielleicht sogar entmutigt), ein C ++ - Klassendesign für ein Partikelobjekt zu haben, dieses Wissen ebenfalls zu haben (dh mehrere Möglichkeiten zu haben, auf diese Informationen zuzugreifen - entweder über das Netzwerkobjekt oder das Partikelobjekt, je nachdem, was bequemer erscheint )?
Network
Klassenobjekt haben, das Particle
Objekte und Contact
Objekte enthält . Mit diesem Basiswissen kann ich dann versuchen zu beurteilen, ob es meinen spezifischen Bedürfnissen entspricht oder nicht, die im Verlauf des Projekts noch erforscht / entwickelt werden.