私のC ++プロジェクトには、2つのクラスとがParticleありContactます。でParticleクラス、Iは、メンバ変数有するstd::vector<Contact> contactsのすべての連絡先含まParticleオブジェクトを、対応するメンバ関数をgetContacts()とaddContact(Contact cont)。したがって、「Particle.h」には「Contact.h」を含めます。
ではContact、クラス、私はのためのコンストラクタにコードを追加したいContactことが呼び出すParticle::addContact(Contact cont)ように、contacts両方のために更新されてParticleいる間でオブジェクトContactオブジェクトが追加されています。したがって、「Contact.cpp」に「Particle.h」を含める必要があります。
私の質問は、これが許容できる/適切なコーディングプラクティスであるかどうかであり、そうでない場合は、達成しようとしていることを実装するためのより良い方法は何ですか(簡単に言えば、新しい連絡先のたびに特定の粒子の連絡先のリストを自動的に更新します)創造された)。
これらのクラスは、NetworkN個の粒子(std::vector<Particle> particles)とNc個の接触(std::vector<Contact> contacts)を持つクラスによって結合されます。しかし、私は次のような関数を使用できるようにしたかったのです。この場合、クラスにparticles[0].getContacts()そのような関数があっても大丈夫ですParticleか、またはこの目的のためにC ++でより良い関連付け「構造」があります(別のクラスで使用されている2つの関連クラスの) 。
私はこれにどのように取り組んでいるのか、ここで視点のシフトが必要かもしれません。2つのクラスはNetworkクラスオブジェクトによって接続されているため、接続情報をNetworkオブジェクトによって完全に制御するのが一般的なコード/クラス編成ですか(パーティクルオブジェクトはその連絡先を認識してはならず、その結果、getContacts()メンバーを持つべきではありません)関数)。次に、特定の粒子が何に接触しているかを知るために、Networkオブジェクトを介して(たとえばを使用してnetwork.getContacts(Particle particle))その情報を取得する必要があります。
Particleオブジェクトがその知識を持つこと(つまり、NetworkオブジェクトまたはParticleオブジェクトのいずれかを介して、その情報にアクセスするための複数の方法があること)は、あまり一般的ではない(おそらく推奨されない)C ++クラス設計でしょうか)?
Networkオブジェクトを含むクラスオブジェクトがある場合、私は典型的な(おそらくは好意的/奨励されている)アプローチを求めていると思います。その基本的な知識があれば、プロジェクトに沿って調査/開発されている特定のニーズに合っているかどうかを評価できます。ParticleContact