私の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」を含める必要があります。
私の質問は、これが許容できる/適切なコーディングプラクティスであるかどうかであり、そうでない場合は、達成しようとしていることを実装するためのより良い方法は何ですか(簡単に言えば、新しい連絡先のたびに特定の粒子の連絡先のリストを自動的に更新します)創造された)。
これらのクラスは、Network
N個の粒子(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
オブジェクトを含むクラスオブジェクトがある場合、私は典型的な(おそらくは好意的/奨励されている)アプローチを求めていると思います。その基本的な知識があれば、プロジェクトに沿って調査/開発されている特定のニーズに合っているかどうかを評価できます。Particle
Contact