In meinem C ++ - Projekt habe ich zwei Klassen Particleund Contact. In der ParticleKlasse habe ich eine Mitgliedsvariable, std::vector<Contact> contactsdie alle Kontakte eines ParticleObjekts sowie die entsprechenden Mitgliedsfunktionen getContacts()und enthält addContact(Contact cont). Daher füge ich in "Partikel.h" "Kontakt.h" ein.
In der ContactKlasse möchte ich dem Konstruktor Code für Contactdiesen Aufruf hinzufügen Particle::addContact(Contact cont), damit dieser contactsfür beide ParticleObjekte aktualisiert wird , zwischen denen das ContactObjekt 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 NetworkKlasse 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 Particlein 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 NetworkKlassenobjekt verbunden sind, ist es eine typische Code- / Klassenorganisation, Konnektivitätsinformationen vollständig vom NetworkObjekt 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 NetworkObjekt 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 )?
NetworkKlassenobjekt haben, das ParticleObjekte und ContactObjekte 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.