ใน C ++ โครงการของฉันฉันมีสองชั้นและParticle
Contact
ในParticle
ระดับที่ฉันมีตัวแปรสมาชิกstd::vector<Contact> contacts
ที่มีรายชื่อทั้งหมดของParticle
วัตถุและสอดคล้องฟังก์ชันสมาชิกและgetContacts()
addContact(Contact cont)
ดังนั้นใน "Particle.h" ฉันรวม "Contact.h"
ในContact
ชั้นเรียนฉันต้องการเพิ่มรหัสไปยังตัวสร้างContact
ที่จะเรียกParticle::addContact(Contact cont)
เพื่อให้contacts
มีการปรับปรุงสำหรับParticle
วัตถุทั้งสองระหว่างContact
วัตถุที่จะถูกเพิ่ม ดังนั้นฉันจะต้องรวม "Particle.h" ใน "Contact.cpp"
คำถามของฉันคือสิ่งนี้เป็นที่ยอมรับ / ฝึกการเขียนโปรแกรมที่ดีหรือไม่และหากไม่มีสิ่งใดจะเป็นวิธีที่ดีกว่าที่จะใช้สิ่งที่ฉันพยายามทำให้สำเร็จ (เพียงแค่อัปเดตรายชื่อผู้ติดต่อสำหรับอนุภาคเฉพาะโดยอัตโนมัติ ถูกสร้าง)
คลาสเหล่านี้จะถูกผูกเข้าด้วยกันโดยNetwork
คลาสที่จะมี N particles ( std::vector<Particle> particles
) และ Nc contact ( std::vector<Contact> contacts
) แต่ฉันต้องการที่จะมีฟังก์ชั่นเช่นparticles[0].getContacts()
- มันไม่เป็นไรที่จะมีฟังก์ชั่นดังกล่าวในParticle
ชั้นเรียนในกรณีนี้หรือมีโครงสร้าง "เชื่อมโยง" ที่ดีขึ้นใน C ++ สำหรับวัตถุประสงค์นี้ (ของสองคลาสที่เกี่ยวข้องที่ใช้ในชั้นเรียนอื่น) .
ฉันอาจต้องเปลี่ยนมุมมองที่นี่ในวิธีที่ฉันเข้าใกล้นี้ เนื่องจากทั้งสองคลาสเชื่อมต่อกันด้วยNetwork
อ็อบเจกต์คลาสเป็นรหัสองค์กร / คลาสทั่วไปที่มีข้อมูลการเชื่อมต่อที่ควบคุมโดยNetwork
วัตถุทั้งหมด (ในที่วัตถุ Particle ไม่ควรรับรู้รายชื่อผู้ติดต่อและดังนั้นจึงไม่ควรมีgetContacts()
สมาชิก ฟังก์ชั่น) จากนั้นเพื่อที่จะทราบว่ามีอนุภาคใดบ้างที่มีการสัมผัสฉันต้องได้รับข้อมูลนั้นผ่านNetwork
วัตถุ (เช่นใช้network.getContacts(Particle particle)
)
มันจะเป็นเรื่องธรรมดาน้อยลงหรือไม่ (อาจท้อใจ) การออกแบบคลาส C ++ สำหรับวัตถุอนุภาคที่มีความรู้เช่นกัน (เช่นมีหลายวิธีในการเข้าถึงข้อมูลนั้น - ผ่านทั้งวัตถุเครือข่ายหรือวัตถุอนุภาคซึ่งดูเหมือนว่าสะดวกกว่า )?
Network
วัตถุคลาสที่มีParticle
วัตถุและContact
วัตถุ ด้วยความรู้พื้นฐานนั้นฉันสามารถลองประเมินว่าเหมาะสมกับความต้องการเฉพาะของฉันหรือไม่ซึ่งยังคงถูกสำรวจ / พัฒนาเมื่อฉันไปตามในโครงการ