내 C ++ 프로젝트에서 나는 두 개의 클래스를 가지고 Particle
와 Contact
. 에서 Particle
클래스 I는 멤버 변수가 std::vector<Contact> contacts
(A)의 모든 접점 포함 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 ++에서 더 나은 연관 "구조"가 있습니까 (다른 클래스에서 사용되는 두 개의 관련 클래스) .
내가 어떻게 접근하고 있는지에 대한 관점 전환이 필요할 수 있습니다. 두 클래스는 Network
클래스 객체 로 연결되어 있기 때문에 일반적인 코드 / 클래스 조직은 Network
객체에 의해 전체적으로 제어되는 연결 정보를 갖도록 되어 있습니까 (파티클 객체는 해당 연락처를 인식하지 않아야하며 결과적으로 getContacts()
멤버 가 없어야 함) 함수). 그런 다음 특정 입자가 어떤 접촉을 가지고 있는지 알기 위해서는 Network
객체를 통해 해당 정보를 얻어야 합니다 (예 :) network.getContacts(Particle particle)
.
Particle 객체가 그 지식을 갖는 것 (즉, 네트워크 객체 또는 Particle 객체 중 하나를 통해 여러 가지 방법으로 정보에 액세스하는 것이 더 편리한 것)을위한 덜 일반적인 C ++ 클래스 디자인이 아닐까요? )?
Network
객체를 포함 하는 클래스 객체 가있을 때 일반적인 (아마도 선호 / 권장되는) 접근 방식을 요구한다고 가정 합니다. 이 기본 지식을 바탕으로 프로젝트에서 진행하면서 아직 탐색 / 개발중인 특정 요구에 맞는지 평가할 수 있습니다. Particle
Contact